2013-09-05 51 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

相關問題