假设我们有一个名为impression
具有三个字段的表
id
site_id
timestamp
这三个字段都是INT
. 我们必须运行以下查询
SELECT COUNT( * ) AS c FROM impression
WHERE timestamp<UNIX_TIMESTAMP(STR_TO_DATE('09,07,2009','%d,%m,%Y'))
AND site_id=11
发现
如果我定义两个单独的索引,一个打开timestamp
一个打开,site id
那么我得到的结果会变慢。在某个数据集上,这个结果需要0.13 s
计算。
但是,如果我定义一个包含这两个字段的复合索引,那么结果会快得多0.0002 s
问题
为什么所有索引字段都必须在一个索引下?如果您有两个单独的索引,那么为什么不使用它们
笔记
是的,我可以EXPLAIN
查询,但这不是问题,解释已经表明了我观察到的内容,但是为什么每个查询必须只有一个索引