我使用这个查询:
SELECT SENSOR_ID, (BOX_COUNT * 6) AS BOX_COUNT, `TIME` AS `TIMESTAMP`
FROM lu_sensor_log INNER JOIN lu_sensors S
ON S.MACHINE_ID=1 AND S.ID=SENSOR_ID
WHERE `TIME` >= '2013-09-04 15:30:00' AND `TIME` <= ' 2013-09-04 17:00:00'
ORDER BY `TIME` ASC这是一个非常简单的查询,一点也不复杂。以前,我们的数据库表有一个用于SENSOR_ID和TIME的配对索引。这个查询(平均)需要4秒才能完成。从那时起,我已经删除了配对索引,并在SENSOR_ID和TIME列上设置了单独的索引--现在查询几乎是即时的。
我尝试过快速搜索谷歌的不同之处,但似乎找不到任何具体的证据证明为什么一种方法会比另一种更快。
有人能帮我澄清一下吗?为什么单列索引比同一列上的配对索引快得多?(当然,在这种情况下更快)。
非常感谢。
发布于 2013-09-05 12:00:27
你没有用配对索引。您一次根据其中一个列限制数据。不是一次两次。
实际上,由于使用了TIME子句,所以您只是在使用WHERE索引。如果WHERE子句另外限制SENSOR_ID,则配对索引将加快查询速度。
要查看真正使用了哪些索引,您应该查看查询的执行计划。
https://stackoverflow.com/questions/18635659
复制相似问题