2015-04-06 51 views
0

以下是我的表架構: -我應該使用什麼指數IS NOT NULL查詢

+---------+---------+----------+ 
| ID | COL1 | COL2 | 
+---------+---------+----------+ 
| 1 | NULL | 1  | 
| 2 | 1 | NULL | 
| 3 | NULL | NULL | 
+---------+---------+----------+ 

現在,我得趕緊走之類的查詢: -

SELECT * FROM `TABLE` WHERE `COL1` IS NOT NULL AND `COL2` IS NULL 


SELECT * FROM `TABLE` WHERE `COL2` IS NOT NULL AND `COL1` IS NULL 

不管我用什麼指數,SELECT * FROM TABLE WHERE ANY_COL IS NOT NULL都沒有利用指數。我現在要做什麼來利用索引?

回答

2

這些查詢應該利用多列索引:第一個爲table(col2, col1),第二個爲table(col1, col2)

is not null不會使用索引的原因是因爲大多數值是 - 大概 - 非空。這意味着查詢引擎在使用索引獲取數據時看不到任何優勢,而只是讀取所有記錄並在讀取完成後執行過濾。

另請注意,小表上的索引使用並不代表在較大的表上發生了什麼。

+0

你如何找到mysql是否使用索引或不是這樣一個小表? – nik

+0

@ user2598085。 。 。使用'explain'。 –

相關問題