性能:我应该将多个查询查询合并为一个吗?

时间:2014-06-19 14:58:44

标签: sql-server

我有两个查询查询可以合并为一个。我在处理的存储过程(业务应用程序)中看到了很多,我想知道合并是否有任何实际好处。

当我同时运行它们时,选项1给我1300次读取(2次),但由于数据已经被缓存,第二组1300次读取不会花费太多,它们将始终只是逻辑读取。

选项2只给出了1300次逻辑读取。是否值得巩固这些,或者只是一个偏好问题,没有任何实际利益?我非常喜欢只打一次桌子(选项2)。我只是在肛门吗?

DECLARE @lookupValue1 INT
        , @lookupValue2 INT
        , @key INT = 1000
        , @recType INT = 'X';

-- Option 1:  two separate simple lookups
SELECT  @lookupValue1 = LookupValue 
FROM    DB1.dbo.T1 
WHERE   KeyValue = @key 
        AND RecType = 'Default';

SELECT  @lookupValue2 = LookupValue 
FROM    DB1.dbo.T1
WHERE   KeyValue = @key
        AND RecType = @recType;

-- Option 2: one combined slightly convoluted lookup
SELECT  @lookupValue1 = MAX(CASE WHEN RecType = 'Default' THEN LookupValue END)
        , @lookupValue2 = MAX(CASE WHEN RecType = @recType THEN LookupValue END)
FROM    DB1.dbo.T1
WHERE   KeyValue = @key
        AND RecType IN ('Default', @recType);

1 个答案:

答案 0 :(得分:1)

是否保证(KeyValue,RecType)组合唯一性? 如果他们应该是独一无二的'但是没有在DB中执行,有人可能会在以后搞砸它。

  • 选项1会抛出错误并防止出现意外行为
  • 选项2会隐藏问题吗?

如果强制执行约束,则无论哪种方式都可以。

btw:我想建议缓存作为替代方案,但似乎业务逻辑存在于数据库而不是应用程序中。