我在MySQL中有幾個表,它們是按時間順序存儲的數據。我最後在這個表中添加了包含日期字段的覆蓋索引。在我的查詢中,我使用BETWEEN操作爲日期字段選擇了一段時間的數據。所以我的WHERE語句由覆蓋索引的所有字段組成。在MySql中BETWEEN操作的索引
當我執行extra列中的EXPLAIN查詢時,我有「使用where」 - 所以,正如我想的那樣,這意味着,該日期字段不會在索引中搜索。當我選擇一段時間的數據時 - 我使用「=」操作而不是BETWEEN和「使用哪裏」 - 沒有出現 - 全部在索引中搜索。
我可以做什麼,我的所有我的WHERE語句要在索引中搜索,包含BETWEEN操作?
UPDATE:
表結構:
CREATE TABLE phones_stat (
id_site int(10) unsigned NOT NULL,
group smallint(5) unsigned NOT NULL,
day date NOT NULL,
id_phone mediumint(8) unsigned NOT NULL,
sessions int(10) unsigned NOT NULL,
PRIMARY KEY (id_site,group,day,id_phone) USING BTREE
) ;
查詢:
SELECT id_phone,
SUM(sessions) AS cnt
FROM phones_stat
WHERE id_site = 25
AND group = 1
AND day BETWEEN '2010-01-01' AND '2010-01-31'
GROUP BY id_phone
ORDER BY cnt DESC
您是否檢查過如果使用> =和<=是否會發生同樣的情況? 哪個版本的MySql? – 2010-02-01 07:08:04
我試圖用one>操作來執行查詢,情況不會改變。 i ;,使用mysql 5.1服務器 – hippout 2010-02-01 07:18:52
粘貼涉及的表的整個模式,查詢和解釋計劃。 BETWEEN應該能夠範圍掃描以涉及的字段開始的索引,除非優化器決定有更好的方式。 – MarkR 2010-02-01 07:41:59