需要太多列的非聚集索引

时间:2015-01-28 16:23:22

标签: sql-server stored-procedures ssms

我有一个名为Search的存储过程,带有14个可选输入参数。将根据数据库中的表dbo.Patients搜索这些输入参数。 dbo.Patients表具有完全相同的14个字段,这些字段是Search存储过程中的可选参数。

对于传递到存储过程的每个参数值,Search存储过程调用特定的相应函数以检查传递到存储过程的值是否与相应列中dbo.Patients表中的值匹配。

所以,我的意思是,我最终确定了14个多行表值用户定义函数,每个函数仅匹配dbo.Patients表的特定列的参数。

问题:出于性能原因,我不认为在所有14列上创建聚簇索引是个好主意。

  1. 我是否应该考虑为每列创建14个非聚集索引,或者在所有列上创建一个索引是一个更好的主意?

  2. 我能想到的第二个问题是保持所有索引被禁用并在调用相关函数之前启用它们吗?

  3. 有什么更好的方法?  如上所述,我有14个UDF,并且所有这些都有类似的选择声明:

    Insert into @MatchedData(RowNumber) select dbo.Patients.Rowid from dbo.Patients where dbo.Patients.firstname = @FirstNameFromUser;
    

    我意识到我应该尝试这个,但只是想知道是否有人已经这样做或以正确的方式指导我。

1 个答案:

答案 0 :(得分:0)

创建索引并不一定能保证更好的性能。我认为在某些字段上创建非聚集索引可能有助于为它们提供大量唯一值,但始终会查看执行计划以验证实际性能。