2014-11-08 155 views
2

嗨,大家請指教我這個。MySQL的優化和索引

我有一個包含百萬條記錄的tablemasterlist。 我使用了CycleDate和ProductType的索引。 我期待的記錄數爲100,132,但sql scan 的行數太多。

explain SELECT * FROM tblmasterlist where CycleDate BETWEEN '2014-08-01' AND '2014-08-30' 

enter image description here


+0

如果你使用cycledate> = 2014-08-01和cycledate的老派方法<= 2014年8月30日 – Christian 2014-11-08 07:31:20

+0

是您的一個類型B樹索引? – Jaylen 2014-11-08 07:34:22

+0

嘗試運行ANALYZE TABLE; MRR在服務器上?你可以查看'select @@ optimizer_switch;' – Jaylen 2014-11-08 07:42:00

回答

1

你的指數CycleDate是確定的,並在此查詢使用。像Mike說的那樣,確保它是一個Typ=BTREE,因爲您選擇了一系列值(請參閱here)。

EXPLAIN給出的記錄數是行數不是真正的量MySQL會掃描的估計(見here):

The rows column indicates the number of rows MySQL believes 
it must examine to execute the query. 
For InnoDB tables, this number is an estimate, and may not always be exact. 

您可以通過更新索引統計增加accurancy:

OPTIMIZE TABLE tblmasterlist