2013-02-20 34 views
0

這是關於一個多對多表格,每個表格鏈接到每個約70000條記錄的表格。多對多有大約530萬條記錄。mysql在WHERE和GROUP BY中的索引使用

有兩個「邊」表(一個是「令牌」,另一個是「段」)的外鍵引用。要找出包含某個給定令牌的所有段,我需要做的沿

SELECT para_id FROM many_to_many WHERE token_id = 3333 GROUP BY para_id; 

行這似乎是儘管相當緩慢運行的「token_id」一欄是「最左邊的」 SELECT語句列的複合主鍵,並且在para_id上有一個索引(由para_id外鍵使用)。

我試過使用EXPLAIN,但似乎永遠不會提及使用para_id索引。我的問題是:是否有可能讓MySQL使用para_id索引?如果沒有,如果我在查詢中包含「JOIN paras ON paras.ID = many_to_many.para_id」,是否有可能使用表「paras」的索引(在'ID'上)?這可能會導致性能改進?

+0

請張貼表格的結構和'EXPLAIN'輸出。 – 2013-02-20 19:01:38

+0

爲什麼在沒有聚合函數的查詢中使用GROUP BY?我敢打賭,在這種情況下,SELECT DISTINCT會更好。 – Sammitch 2013-02-20 19:09:20

+0

@Sammitch - 啊,有道理。非常感謝,我會探討這一點。如果你關心點,也許你應該回答一個問題,等等。 – 2013-02-22 19:02:35

回答

0

您可能需要通過token_id字段索引many_to_many。複合主鍵在這裏沒有幫助。

+0

謝謝...我已經讀過,事實上,複合主要功能就像一個普通的單一字段索引,但僅適用於複合主要內容中最左側的元素(在這種情況下是token_id)。但是你的建議讓我覺得我應該做一些實驗...... – 2013-02-26 09:58:52