我有两个查询查询可以合并为一个。我在处理的存储过程(业务应用程序)中看到了很多,我想知道合并是否有任何实际好处。
当我同时运行它们时,选项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);
答案 0 :(得分:1)
是否保证(KeyValue,RecType)组合唯一性? 如果他们应该是独一无二的'但是没有在DB中执行,有人可能会在以后搞砸它。
如果强制执行约束,则无论哪种方式都可以。
btw:我想建议缓存作为替代方案,但似乎业务逻辑存在于数据库而不是应用程序中。