最大指数(第2列)

时间:2016-01-03 16:24:58

标签: mysql

对于包含两个非空列的表:id (primary)date (indexed),我在mysql-slow日志中得到以下条目。

# Query_time: 16.316747  Lock_time: 0.000049 Rows_sent: 1  Rows_examined: 616021
SET timestamp=1451837371;
select max(date) from mytable where id<896173;

我在此查询上运行了EXPLAIN,这就是结果。

id            = 1
select_type   = SIMPLE
table         = mytable
type          = range
possible_keys = PRIMARY
key           = PRIMARY
key_len       = 4
ref           = NULL
rows          = 337499
Extra         = Using where

我尝试编辑date索引以向其添加id列。但是,检查的行数仍然很高。我该怎么做才能减少这个数字?

2 个答案:

答案 0 :(得分:1)

引擎需要查看id<896173的所有行,然后从中选择max(date)。拥有日期索引和id索引并没有多大帮助。 MySQL可以使用日期索引来仅识别行的子集。

但是,该子集足够大,读取所有行(使用顺序访问)比仅读取子集(使用随机访问)更快。

答案 1 :(得分:1)

我建议您使用更具选择性的索引,例如

的倒数
use an index based on  id, date  

以这种方式,id驱动选择,日期字符支持选择。