我面臨以下問題,我不確定最佳做法。MySQL中的兩個單列索引與一個兩列索引?
考慮下表(它會變大):
id PK | giver_id FK | recipient_id FK | date
我使用InnoDB,據我所知,它爲兩個外鍵列自動創建索引。不過,我也會做很多的查詢,我需要匹配一個特定的組合:
SELECT...WHERE giver_id = x AND recipient_id = t
。
每個這樣的組合在表中都是唯一的。
在這些列上添加兩列索引是否有任何好處,或者理論上兩個單獨索引是否足夠/相同?
'MySQL只能使用每個SELECT一個索引'這不再是真的,如果您編輯了要更新的答案,那將會很好。 – Davor 2015-09-22 21:25:42
你是否介意解釋爲什麼覆蓋索引不能被'recipient_id'使用? – 2015-10-05 15:50:50
@IvoPereira MySQL中的多列索引使您可以使用索引中的所有字段,從左到右。例如,如果你有一個'INDEX(col1,col2,col3,col4)',那麼這個索引將用於'WHERE'子句的搜索,比如'col1 ='A''或'col1 ='A'AND col2 = 'B'或'col1 ='A'和col2 ='B'和col3 ='C'和col4 ='D',但這個特定的索引不會用於像'WHERE col2 ='B' '或'WHERE col3 ='C'和col4 ='D',因爲搜索字段在索引定義中不是最多的。您將不得不添加額外的索引來覆蓋這些字段。 – Slicktrick 2017-02-15 17:43:14