我面临以下问题,我不确定最佳做法。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