Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让SQL使用正确的索引_Sql_Mysql_Optimization_Indexing_Query Optimization - Fatal编程技术网

让SQL使用正确的索引

让SQL使用正确的索引,sql,mysql,optimization,indexing,query-optimization,Sql,Mysql,Optimization,Indexing,Query Optimization,我有一个包含两个索引的表,其中一个是某个查询的更快覆盖索引。但是,mySQL(5.1)没有选择正确的索引。我已经看过了这个查询的解释,并做了一些速度测试,如果你强制使用这个键,结果会有很大的不同 有没有办法检查它是如何选择索引的,以及它是基于什么标准的?这将使用您需要的索引(如果它可用): MySQL收集并使用表统计信息来估计索引的基数 它将其保存在信息\u schema.statistics中 在可以应用于筛选的两个索引中,MySQL选择基数较大的索引 如果有两个基数大的索引,它可以选择索引合

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


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

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

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

它将其保存在
信息\u schema.statistics

在可以应用于筛选的两个索引中,
MySQL
选择基数较大的索引

如果有两个基数大的索引,它可以选择
索引合并

在一个索引可以服务于
其中
条件,而另一个索引可以服务于
ORDER BY
MySQL
似乎更喜欢第一个索引

但是,在后一种情况下,最好在两列上创建一个复合索引,它可以同时服务于两个子句

SELECT  *
FROM    table FORCE INDEX (myindex)