2015-09-22 88 views
1

由於某種原因,我的慢查詢日誌報告下面的查詢爲「不使用索引」,對於我的生活,我無法理解爲什麼。爲什麼這個查詢被記錄爲「不使用索引」?

下面是該查詢:

update scheduletask 
set  active = 0 
where nextrun < date_sub(now(), interval 2 minute) 
and  enabled = 1 
and  active = 1; 

下面是表:

CREATE TABLE `scheduletask` (
    `scheduletaskid` int(11) NOT NULL AUTO_INCREMENT, 
    `schedulethreadid` int(11) NOT NULL, 
    `taskname` varchar(50) NOT NULL, 
    `taskpath` varchar(100) NOT NULL, 
    `tasknote` text, 
    `recur` int(11) NOT NULL, 
    `taskinterval` int(11) NOT NULL, 
    `lastrunstart` datetime NOT NULL, 
    `lastruncomplete` datetime NOT NULL, 
    `nextrun` datetime NOT NULL, 
    `active` int(11) NOT NULL, 
    `enabled` int(11) NOT NULL, 
    `creatorid` int(11) NOT NULL, 
    `editorid` int(11) NOT NULL, 
    `created` datetime NOT NULL, 
    `edited` datetime NOT NULL, 
    PRIMARY KEY (`scheduletaskid`), 
    UNIQUE KEY `Name` (`taskname`), 
    KEY `IDX_NEXTRUN` (`nextrun`) 
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=latin1; 
+0

獲得解釋並張貼在這裏的結果 – Mojtaba

回答

1

添加另一個指標是這樣

KEY `IDX_COMB` (`nextrun`, `enabled`, `active`) 

我不知道你的表有多少行有,但以下可能適用以及

有時MySQL不即使使用索引,一個是可用的。一個 發生這種情況的情況是,當優化程序估計 使用該索引將要求MySQL訪問表中行的非常大的 百分比。 (在這種情況下,一臺掃描 可能會更快,因爲它需要較少的追求。)

0

嘗試使用mysql中的 「解釋」 命令。 http://dev.mysql.com/doc/refman/5.5/en/explain.html 我想解釋只適用於選擇語句,嘗試:

解釋SELECT * FROM scheduletask其中nextrun < DATE_SUB(NOW(),區間2分鐘),並啓用= 1,積極= 1;

也許如果你使用,nextrun = ...,它會驅動密鑰IDX_NEXTRUN。在你的where子句必須是你的關鍵之一,scheduletaskid,taskname或nextrun

相關問題