2015-10-16 50 views
0

查詢:覆蓋SELECT索引給出了使用where;使用指數;而不是僅使用索引;

SELECT A from table_name where A = 'a'; 

explain輸出

1 SIMPLE table_name ref A_idx A_idx 1 const 40582635 **Using where; Using index** 

問題

我有一個綜合指數A_idx on (A,B,C)...

我一個由於該索引涵蓋了完整的查詢,因此期望輸出僅使用索引的。但我仍然使用哪裏獲得;利用指數 ...

有問題的列如下定義一個ENUM。

A enum('a','b','c') COLLATE utf8_unicode_ci NOT NULL, 
+0

apparantly即時通訊甚至得到這個..如果我從表其中id> 100' .... –

+0

讓我們來看看事情的diff方式做'選擇ID。你從FLUSH STATUS得到什麼?選擇 ... ; SHOW SESSION STATUS LIKE'Handler%';'表中有多少行? –

+0

我「會做到這一點,並很快 –

回答

1

如在explain output documentation相應部分中所描述,「即使使用的是指數爲WHERE子句的所有部分,可能會看到使用其中如果該列可以爲NULL」。

更新:該文檔還指出,「如果Extra列還表示使用其中[除了使用索引],則意味着該索引被用來執行密鑰值的查找。」

+0

提交錯誤的列不空..因此,我添加的列的定義。 –

+0

它不應該被仰視鍵值由於所需的值是指數本身的一部分的權利..是不是覆蓋指數的整點? –

+0

顯然決定不將優化。 – Shadow

相關問題