2013-09-05 56 views
2

我使用这个查询:成对索引和单列索引之间的区别?

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_IDTIME的配对索引。这个查询需要(平均)4秒完成。自从我删除了配对索引并在列SENSOR_IDTIME上设置了单个索引 - 现在查询几乎是即时的。

我已经尝试了快速谷歌搜索有关的差异,但似乎无法找到任何具体的证据为什么一种方法会比另一种更快。

任何人都可以为我清除它吗?为什么单列索引比同一列上的配对索引快得多? (在这个过程中更快)。

非常感谢。

回答

1

您未使用配对索引。您一次只能根据其中一列限制数据。不一次。

事实上,您只是使用TIME索引,因为您的WHERE子句。如果您的WHERE子句额外限制SENSOR_ID,配对索引会加快查询速度。

要查看真正使用了哪些索引,应该查看查询的执行计划。

+0

非常高兴谢谢你。顺便说一下,这两种方法有什么区别?即为什么你会选择一个呢?如果它不是太宽泛的问题。干杯。 – LokiSinclair

+0

@LokiSinclair索引应该反映你在'WHERE'子句中的标准。所以在大多数情况下,如何选择一个索引是非常明显的。 – Kai

相关问题