1
我對MySQL並不瞭解,正如任何非DBA程序員都知道的:如何獲取數據。選擇連接X到Y比將Y連接到X快十倍 - 爲什麼這樣?
我在我的網站上有一個頁面運行得非常慢,查詢是瓶頸。這需要十秒鐘來做到這一點:
SELECT foo, bar, baz, bax
FROM small_table
LEFT JOIN
large_table
on small_table.id = large_table.thread_id
我沒有任何索引,所以我索引id列。現在需要六秒鐘。
然後我做了一些閱讀,嘗試ANALYZE
和EXPLAIN
命令,但並沒有真正瞭解他們,然後只是爲了實驗,改變了周圍的表:
SELECT foo, bar, baz, bax
FROM large_table <-- first
LEFT JOIN
small_table <-- second
on small_table.id = large_table.thread_id
,現在花了零點六秒。
[該應用程序是一個論壇。 small_ table
列出了螺紋(100條記錄),並large_ table
包含這些線程(20,000條記錄)的帖子]
我可以,當然,繼續實驗,但有些問題:
- 什麼我有沒有發現原理?
- 一般來說,當我的選擇緩慢時,最好的處理方式是什麼?
- 在上面的例子中,我是否和以前一樣有
SELECT
?它產生完全相同的結果。 - 我應該從
ANALYZE
和EXPLAIN
學到什麼?
請問您能明確什麼是「第一」表?第一個按文件順序?因爲我說查詢以big_table JOIN small_table運行得更快,您似乎認爲它應該是相反的方式。 [順便說一下,我認爲這些數據與我忽略查詢的其他部分的原因是一樣的。] – AmbroseChapel 2011-04-11 00:51:54