[英]SQL server grouping on NULLABLE column
通常,常规索引无法存储NULL值。 因此,即使您在代码上有索引,您的WHERE条件也无法从该索引中受益。
如果索引中包含C1(我认为不是NOT NULL),则情况会有所不同,因为所有元组(code = NULL,C1 =( some value ))都可以并且将被索引。 根据您的问题,数量很少; 因此,SQL Server只需返回所有这些元组的行就可以大大提高速度。
首先,关于性能的几句话。 我们为您提供几种变型。
索引视图-
IF OBJECT_ID('dbo.t', 'U') IS NOT NULL
DROP TABLE dbo.t
GO
CREATE TABLE dbo.t (
ID INT IDENTITY PRIMARY KEY,
Code VARCHAR(10) NULL,
[Status] INT NULL
)
GO
ALTER VIEW dbo.v
WITH SCHEMABINDING
AS
SELECT Code, [Status] = SUM(ISNULL([Status], 0)), Cnt = COUNT_BIG(*)
FROM dbo.t
WHERE Code IS NOT NULL
GROUP BY Code
GO
CREATE UNIQUE CLUSTERED INDEX ix ON dbo.v (Code)
SELECT Code, [Status]
FROM dbo.v
筛选索引-
CREATE NONCLUSTERED INDEX ix ON dbo.t (Code)
INCLUDE ([Status])
WHERE Code IS NOT NULL
将等待您的第二个执行计划。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.