假设我们有一个名为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
查询,但这不是问题,解释已经建议我观察到了什么,但为什么每个查询只需要一个索引