我应该使用什么索引进行IS NOT NULL查询

时间:2015-04-06 16:17:14

标签: mysql sql

以下是我的表架构: -

+---------+---------+----------+
|   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都不会利用索引。我现在该怎么做才能利用索引?

1 个答案:

答案 0 :(得分:2)

这些查询应该利用多列索引:第一个为table(col2, col1),第二个为table(col1, col2)

is not null不使用索引的原因是因为大多数值 - 可能 - 不为空。这意味着查询引擎在使用索引获取数据方面没有任何优势,只需读取所有记录并在读取后执行过滤。

另请注意,小表上的索引使用情况并不代表较大表上发生的情况。