1

假设我们有一个名为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查询,但这不是问题,解释已经表明了我观察到的内容,但是为什么每个查询必须只有一个索引

4

0 回答 0