【问题标题】:MySQL Indexes: Having multiple indexes vs. having one multi-field key?MySQL 索引:拥有多个索引与拥有一个多字段键?
【发布时间】:2011-03-22 21:48:23
【问题描述】:

当我在 MySQL 中手动创建表时,我会为我认为将用于查询的每个字段一次添加一个索引。

当我使用 phpMyAdmin 为我创建表并在 create-table 表单中选择我的索引时,我看到 phpMyAdmin 将我的索引合并为 1(加上我的主索引)。

有什么区别?这个比那个好吗?在什么情况下?

谢谢!

【问题讨论】:

    标签: mysql database indexing


    【解决方案1】:

    这两者都不是一个特别好的策略,但如果我必须选择,我会选择多个单一索引。

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

    没有一条简单的规则总是适用于选择最佳索引。您需要查看正在执行的查询类型并选择可以加快这些特定查询的索引。如果您仔细考虑列的顺序,您会发现少量索引对多个不同的查询很有用。例如,如果在一个查询中过滤ab,而另一个查询只过滤b,则两个查询都可以使用(b,a)上的索引,但索引(a, b) 不会。

    【讨论】:

    • 创建索引(a,b)和索引(b,a)有区别吗?换句话说,在创建索引时放置正确的顺序是否重要?
    【解决方案2】:

    这实际上取决于您的查询。有些查询更好地利用了多列索引,有些则没有。 EXPLAIN 是你的朋友。

    http://dev.mysql.com/doc/refman/5.6/en/explain.html

    这里还有一个很好的资源:

    http://dev.mysql.com/doc/refman/5.6/en/optimization-indexes.html

    【讨论】:

    • 我还没有真正写过任何查询(只是在设计阶段)。所以基本上你是说,等到我准备好查询时再有索引......
    • 有些索引在设计阶段很容易想到,但大多数会在您创建查询时添加。
    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多