Sql server 2008 r2 为什么where子句中的IS NULL逻辑读取高?

Sql server 2008 r2 为什么where子句中的IS NULL逻辑读取高?,sql-server-2008-r2,Sql Server 2008 R2,如何减少以下存储过程的逻辑读取 存储过程 SELECT column1,column2,... FROM myview as v WHERE (v.LanguageId IN (1) OR v.LanguageId IS NULL) AND OrganisationId IN (1,2,3) AND (v.ETypeLanguageId IN (1) OR v.ETypeLanguageId IS NULL) AND (v.GTypeLanguageId IN (1) OR

如何减少以下存储过程的逻辑读取

存储过程

SELECT 
column1,column2,...
FROM myview as v
WHERE (v.LanguageId IN (1) OR v.LanguageId IS NULL)      
AND OrganisationId IN (1,2,3)  
AND (v.ETypeLanguageId IN (1) OR v.ETypeLanguageId IS NULL)  
AND (v.GTypeLanguageId IN (1) OR v.GTypeLanguageId IS NULL)  
AND v.TargetTypeId IN (2) ORDER BY column1,column2
OPTION (RECOMPILE)

最好的问候,

可能是因为。。!!您需要检查统计数据和执行计划。没有人能从原始查询中分辨出来。既然如此,那么考虑一个针对TrimeType和CyrnStudio的索引,如果它们将显著减少应用其他检查的行数。这些列是否被索引?ETypeLanguageId,GTypeLanguageId,LanguageId?@g2server,是的,这些是覆盖索引。我想为这些添加过滤索引。如何添加?@LoztInSpace,我在TargetTypeId和OrganizationId上创建了过滤索引。它们已经被使用过了,还可以。问题是因为“或v.LanguageId为NULL”、“或v.ETypeLanguageId为NULL”和“或v.GTypeLanguageId为NULL”。