我有相同的sql脚本:
....
update table_1 set atrDate_1 = date_1
where atr_1 = param_1
and atr_2 <= param_2
and atr_3 > param_3
and ...
select * from table_1
where atr_1 = param_1
and atr_2 <= param_2
and atr_3 > param_3
and ...
....
在这个脚本中我有两个查询。如何在这些查询中查看条件是等于。
我的业务规则要求按照我向您展示的顺序执行这些查询。但我认为这些查询不是最优的,因为我需要在查询中使用equals条件。
您可能知道如何优化我的查询吗?
感谢。
答案 0 :(得分:1)
您可以创建一个临时表,其中包含表的主键列。
然后,您可以将此临时表用作过滤器,这可能比多次应用过滤器谓词更快。
SELECT
id
INTO #ids
FROM table_1
WHERE
atr_1 = param_1
AND atr_2 <= param_2
AND atr_3 > param_3
AND ...
UPDATE
t1
SET
atrDate_1 = date_1
FROM #ids tmp
JOIN table_1 t1 ON id = tmp.id
SELECT
t1.*
FROM #ids tmp
JOIN table_1 t1 ON id = tmp.id
答案 1 :(得分:0)
您不需要使用第二个select
语句,而是使用Output
中的update
语句
UPDATE table_1
SET atrDate_1 = date_1
output inserted.*
WHERE atr_1 = param_1
AND atr_2 <= param_2
AND atr_3 > param_3
.....