让SQL使用正确的索引

时间:2009-05-29 11:35:51

标签: sql mysql optimization indexing query-optimization

我有一个包含两个索引的表,其中一个索引是某个查询的覆盖速度更快的索引。但是,mySQL(5.1)没有选择正确的索引。我查看了这个查询的解释并完成了一些速度测试,如果你强制关键,它会产生很大的不同。

有没有办法检查它如何选择索引以及它基于什么标准?

1 个答案:

答案 0 :(得分:7)

这将使用您需要的索引(如果它可用):

SELECT  *
FROM    table FORCE INDEX (myindex)

MySQL收集并使用表统计信息来估计索引的基数。

将其保存在information_schema.statistics

在可以应用于过滤的两个索引中,MySQL选择具有更高基数的索引。

如果有两个具有大基数的索引,则可以选择INDEX MERGE两个索引。

在一个索引中可以提供WHERE条件而另一个索引可以提供ORDER BYMySQL似乎更喜欢第一个

然而,在后一种情况下,最好在两列上创建一个复合索引,它可以为两个子句提供服务。