让SQL使用正确的索引

Dan*_*Dan 4 mysql sql indexing optimization query-optimization

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

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

Qua*_*noi 7

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

SELECT  *
FROM    table FORCE INDEX (myindex)
Run Code Online (Sandbox Code Playgroud)

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

它保持它information_schema.statistics.

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

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

在一个指数可以服务WHERE条件和另一个可以服务ORDER BY,MySQL似乎更喜欢第一个

但是,在后一种情况下,最好在两列上创建一个复合索引,这可以为两个子句提供服务.