我的理解是null在DB2中是不可索引的,所以假设我们有一个巨大的表(Sales),其日期列(sold_on)通常是一个日期,但偶尔(10%的时间)为null.
此外,让我们假设它是一个我们无法改变的遗留应用程序,因此这些空值保留在那里并且意味着某些东西(假设已经返回的销售额).
我们可以通过在sold_on和total列上放置索引来快速进行以下查询
Select * from Sales where Sales.sold_on between date1 and date2 and Sales.total = 9.99
但索引不会更快地进行此查询:
Select * from Sales where Sales.sold_on is null and Sales.total = 9.99
因为索引是在值上完成的.
我可以索引空值吗?也许通过改变索引类型?索引指标栏?
从哪里可以看出DB2没有为NULL编制索引?我在文档或支持索赔的文章中找不到任何内容.我只是在一个大表中使用IS NULL限制执行查询,该限制涉及包含一小部分NULL的索引列; 在这种情况下,DB2肯定使用了索引(由EXPLAIN验证,并通过观察数据库立即响应而不是花时间执行表扫描).
所以:我声称DB2在非主键索引中没有NULL问题.
但正如其他人所写:您的数据可能以DB2认为使用索引不会更快的方式组成.或者数据库的统计信息对于所涉及的表不是最新的.