在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。
哪种方法最好?
如果我采用第二种方法,那么在没有搜索表两次的情况下检查和返回完全匹配的查询是什么?
答案 0 :(得分:0)
我尝试了各种方法,但在性能服务器中进行测试后,以下内容提供了最佳性能:
1)使用与LargeTable相同的结构创建临时表。
2)将输入参数中的所有主列值插入临时表。
3)使用@CategoryId匹配值更新临时表。
4)使用-1匹配值更新临时表,其中临时表未使用@CategoryId更新。
5)从临时表中返回数据。
看起来将此查询拆分为两个查询为SQL Server提供了一些喘息空间,因此它为长期和重载提供了最佳SLA。