MySQL索引:拥有多个索引 vs 拥有一个多字段键?

6
当我在MySQL中手动创建表时,我会为我认为将用于查询的每个字段逐个添加索引。
当我使用phpMyAdmin为我创建表,并在create-table表单中选择我的索引时,我看到phpMyAdmin将我的索引合并为1个(加上我的主键)。
有什么区别?哪一个更好?在哪种情况下使用哪一个?
谢谢!
2个回答

15

两种策略都不是特别好,但如果非得选择,我会选择使用多个单独的索引。

原因是仅当您在索引的任何完整前缀中使用所有字段时,才能使用索引。如果您有一个索引(a,b,c,d,e,f),那么这对于过滤a或同时过滤ab的查询可以正常工作,但对于仅过滤c的查询,则无用。

没有一条简单的规则始终适用于选择最佳索引。您需要查看自己正在进行的查询类型,并选择可以加速这些特定查询的索引。如果您仔细考虑列的顺序,您可以找到少量对多个不同查询有用的索引。例如,如果一次查询中您对ab进行过滤,而另一次查询中您只对b进行过滤,则(b,a)索引将可用于两个查询,但(a,b)索引将不行。


创建索引时,使用index(a, b)和index(b, a)有什么区别吗?换句话说,在创建索引时放置正确的顺序是否很重要? - H Aßdøµ

9

我还没有真正编写任何查询(只是在设计阶段)。所以基本上你的意思是,在我准备好查询之前不要创建索引... - Nathan H
1
一些索引在设计阶段很容易想到,但大多数索引将在创建查询时添加。 - Mchl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接