【问题标题】:Performance of multi-column MySQL indexes when using only one column in a query在查询中仅使用一列时多列 MySQL 索引的性能
【发布时间】:2010-09-20 16:12:45
【问题描述】:

我对我的数据库有这样的查询:

SELECT * FROM expenses WHERE user_id = ? AND dated_on = ?

我已经在user_iddated_on 列的表中添加了索引。当我使用SHOW INDEXES FROM expenses 检查索引时,有两行——一行的seq_in_index 值为1,另一行的seq_in_index 值为2。

我的问题是,如果我随后提交一个仅使用两个 WHERE 子句之一的查询,例如:

SELECT * FROM expenses WHERE user_id = ?

创建另一个仅索引user_id 列的索引有什么好处,或者上面描述的user_id/dated_on 索引是否能同样有效地使用?

最后,如果使用查询呢:

SELECT * FROM expenses WHERE dated_on = ?

seq_in_index 值 2 在这种情况下如何影响索引的使用和性能?

【问题讨论】:

    标签: sql mysql indexing


    【解决方案1】:

    MySQL 可以使用any left portion of an index

    在您的示例中,SELECT * FROM expenses WHERE user_id = ? 将使用索引,但 SELECT * FROM expenses WHERE dated_on = ? 不会。

    对于 3 列索引 A、B、C,WHERE A = ? AND B = ? 将使用 A 和 B 上的索引,但 WHERE A = ? AND C = ? 将仅使用 A 上的索引

    【讨论】:

      【解决方案2】:

      如果您在 user_id 和 dated_on 上的索引确实按照该顺序(user_id 在前),那么它也将用于 user_id 查询。您可以使用 EXPLAIN 查看查询的实际策略。

      【讨论】:

      • 我真的很想知道 seq_in_index 值如何改变查询性能,所以我相应地编辑了问题
      猜你喜欢
      • 1970-01-01
      • 2015-03-25
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      相关资源
      最近更新 更多