我正在使用这个查询:
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
列上设置了单独的索引 - 现在查询几乎是即时的。
我已经尝试在谷歌上快速搜索这些差异,但似乎找不到任何具体证据来说明为什么一种方法比另一种方法更快。
谁能帮我解决这个问题?为什么单列索引比相同列上的成对索引快得多? (当然在这种情况下更快)。
非常感谢。
最佳答案
您没有使用配对索引。您一次根据其中一列限制数据。不能同时进行。
事实上,由于 WHERE
子句,您只是在使用 TIME
索引。如果您的 WHERE
子句另外限制了 SENSOR_ID
,配对索引会加快您的查询速度。
要查看真正使用了哪些索引,您应该查看查询的执行计划。
关于mysql - 成对索引和单列索引的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635659/