SQL Server 筛选索引,解决唯一索引中空值干扰,降低索引开销

作者:vkvi 来源:ITPOW(原创) 日期:2022-7-28

SQL Server 建一个唯一索引,NULL 值、零长度字符串都会参与唯一计算,只能有一个记录为 NULL,只能有一条记录为零长度字符串。

使用 SQL Server 就可以解决这种烦恼。

CREATE UNIQUE NONCLUSTERED INDEX IX_Users_1   
ON Users(PhoneNumber)  
WHERE PhoneNumber <> ''
GO

可以看出多了 WHERE 条件(上述 SQL 没有使用 NULL,因为我们表中没允许 NULL)。

哪些版本支持?

SQL Server 2008 及以上均可支持。

还有什么用?

由于 where 是活的,我们可以写很多条件,比如 state = 1 的情况才参与索引。

还有什么好处?

除了建索引更灵活,这种做法还减少了索引的存储和维护开销,有利于查询性能的提升。因为它排除了没必要建索引的记录。

可视化操作在哪?

在表设计中是不行的。

要展开表下面的“索引”文件夹,右键,新建索引,非聚集索引。

SQL Server 2008 是表下面的“索引”文件夹,右键,新建索引。

可视化进入后,筛选表达式示例:

([PhoneNumber]<>'')

相关阅读

相关文章