在布尔列上添加SQL Server索引以提高性能

时间:2014-02-24 18:13:00

标签: sql sql-server stored-procedures indexing

我在重型存储过程中有一个条件语句。 25%的行具有Visible = 1条件,但其余行没有,也没有在Web应用程序中使用,只是它被处理的引用。向该列添加索引是否有益?

WHERE 
   ev.Visible = 1 AND
   (@StartDate IS NULL OR @StartDate <= ev.StartDate) 

1 个答案:

答案 0 :(得分:3)

最佳做法是测试您的实际数据并确定您的发现。

对于较大的体积,25%的选择性不是很好。对您的数据进行测试以验证。您可能正在进行其他需要其他索引的搜索。

有几种方法可以更好地处理这种情况:

  • 根据WHERE子句中的其他谓词的不同,您可能需要考虑使用筛选索引。 CREATE INDEX [IX_Post_Startdate] ON dbo.Posts(StartDate) WHERE VISIBLE = 1。这将为您基于startDate搜索的其他查询提供支持。
  • 如果 ALL 您的查询使用相同的模式(Visible = 1 AND ...),那么分区可能是一种很好的方法。
    • 分区是一项企业功能,因此如果您不使用该版本,则可以通过将“不可见”行移动到某种存档表来手动对数据进行分区。
  • 如果你有很少的INSERT / UPDATE / DELETE和许多SELECT语句,那么使用索引视图可以证明是一个很好的解决方案。
相关问题