我正在尝试查找列中包含NULL的所有记录。该列已建立索引。但是,当我将where子句设置为
时where person_key is null
SQL Server需要很长时间才能做出响应。另一方面,寻找特定值的查询会很快返回。
是否可以编写查询来加快对person_key中具有NULL的记录的搜索?谢谢!
答案 0 :(得分:1)
我正在尝试查找列中包含NULL的所有记录。的 列已建立索引。但是,当我将where子句设置为
时where person_key is null
SQL Server需要很长时间才能做出响应。寻找的查询 另一方面,特定的值会很快返回。
是否可以编写查询以加快搜索速度 在person_key中具有NULL的记录?谢谢!
就像上面的每个人一样,要提供适当的建议,还应该提供更多的信息。这里有一些开始:
正如许多评论已经提到的,从提供的有限信息中我可以猜到,这里有几件事情要看:
person_key列中NULL值的百分比是什么?
如果该值非常少,则该列上的行存储非聚集索引 应该能够涵盖您的搜索。查询中所有选定的列都可以包含在此索引的INCLUDE子句下。 相关的MVP链接可获得一些见解:https://www.brentozar.com/archive/2019/03/are-nulls-stored-in-a-nonclustered-index/
如果百分比更高,则可以使用以下一些选项:
请记住,您需要始终查看要选择的列。如果您正在执行SELECT *或SELECT中有索引未涵盖的列,则意味着即使您能够利用索引来覆盖对person_key列的搜索,但能够获取其余列的值,必须查看现有的聚集索引,或者通过扫描所有叶子页面从HEAP获取数据。那不会使查询变得很快。