【问题标题】:Mysql query optimization - using indexesMysql查询优化——使用索引
【发布时间】:2011-12-07 14:21:37
【问题描述】:

我有以下疑问:

select from `table` where `a`>0 order by `b` desc limit 0, 10
select from `table` where `a`<0 order by `b` desc limit 0, 10

我希望它们尽可能快地运行。现在的问题是最好的解决方案是什么?

  • 为 a 创建索引,为 b 创建索引
  • 为 a、b 创建多列索引
  • 为 b、a 创建多列索引

我的猜测是使用多列索引会得到最好的结果......但是列的正确顺序是什么? MySQL 会先匹配列a,然后匹配b,还是先匹配b,然后匹配a

谢谢

【问题讨论】:

  • 复合索引在这种情况下没有帮助。
  • 表中a&gt;0 的行的百分比是多少?a&lt;0 的行是多少?

标签: mysql sql optimization indexing


【解决方案1】:

(a,b) 上的索引应该可以快速运行。

文档说

即使 ORDER BY 与索引不完全匹配,也可以使用索引,只要索引的所有未使用部分和所有额外的 ORDER BY 列都是 WHERE 子句中的常量。

现在如果 > 0,可以被视为常数,我认为应该如此,那么 index (a,b) 可能会很快工作。虽然你可能想试试看解释计划。

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

【讨论】:

    【解决方案2】:

    理论是一回事,在实践中您总是必须进行基准测试。

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2018-11-30
      • 1970-01-01
      相关资源
      最近更新 更多