当获取具有精确输入匹配的行(如果存在)时,哪个sql查询在重载和继续加载时表现最佳,否则常见匹配

时间:2015-07-21 07:16:57

标签: sql sql-server-2014

在SP中,我将EmployeeId,UnitId,CategoryId作为输入参数。

我需要搜索给定类别ID的给定输入参数 在一张大表(1.5亿条记录)中。大表在EmployeeId,UnitId,CategoryId上具有聚簇索引。

查询应返回与输入类别ID的完全匹配,或者如果未找到确切的输入类别id,则应返回类别id = -1的行。 e.g。

`select * from LargeTable where EmployeeId=@EmployeeId and UnitId=@UnitID and category_id in (@CategoryId, -1)`

它是最佳性能查询还是我应该写两个查询,首先会查找完全匹配,如果未找到匹配则第二个查询将执行并返回行匹配categoryid -1。

哪种方法最好?

如果我采用第二种方法,那么在没有搜索表两次的情况下检查和返回完全匹配的查询是什么?

1 个答案:

答案 0 :(得分:0)

我尝试了各种方法,但在性能服务器中进行测试后,以下内容提供了最佳性能:

1)使用与LargeTable相同的结构创建临时表。

2)将输入参数中的所有主列值插入临时表。

3)使用@CategoryId匹配值更新临时表。

4)使用-1匹配值更新临时表,其中临时表未使用@CategoryId更新。

5)从临时表中返回数据。

看起来将此查询拆分为两个查询为SQL Server提供了一些喘息空间,因此它为长期和重载提供了最佳SLA。