我有一個MySQL 4.x的DB以下3個表之間的優化:SQL查詢:內部聯接大表
- 主機:(300.000記錄)
- ID(無符號整數) PRIMARY KEY
- 名稱(VARCHAR 100)
- 路徑:(6.000.000記錄)
- ID(無符號整數)PRIMARY KEY
- 名(VARCHAR 100)
- 網址:(7.000.000記錄)
- 主機(無符號整數)PRIMARY KEY < - - 鏈接到主機.id
- 路徑(UNSIGNED INT)主鍵< ---鏈接到paths.id
正如您所看到的,架構非常簡單,但問題在於這些表中的數據量。
這裏是我運行查詢:
SELECT CONCAT(H.name, P.name)
FROM hosts AS H
INNER JOIN urls as U ON H.id = U.host
INNER JOIN paths AS P ON U.path = P.id;
這個查詢工作完全正常,但需要50分鐘來運行。有人對我如何加快查詢有任何想法嗎?
在此先感謝。 Nicolas
實際上,如果他真的想要返回所有行,索引可能沒有幫助。對錶中的每個值執行索引查找可能比全面掃描表並將其散列或合併在一起慢。 – 2009-02-04 14:25:58
我看到幾百兆字節的數據。如果這一切都符合記憶 - 你是對的。但是一個合適的DBMS(我甚至猜測MySQL 4.x,因爲它足夠合適)會自動忽略現有的索引。 – Leonidas 2009-02-04 14:39:37