sql 优化更新和 select 查询
sql optimize update and select queries
我有相同的 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 ...
....
在这个脚本中我有两个查询。如何查看这些查询中的条件是否相等。
我的业务规则要求按照我向您展示的顺序执行这些查询。但是我认为这个查询不是最优的,因为我需要在查询中使用等于条件。
您知道如何优化我的查询吗?
谢谢。
您不需要第二个 select
语句而是在 update
中使用 Output
语句
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
.....
您可以创建一个临时 table,其中包含 table 的主键列。
然后您可以将此临时 table 用作过滤器,这可能比多次应用过滤器谓词更快。
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
我有相同的 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 ...
....
在这个脚本中我有两个查询。如何查看这些查询中的条件是否相等。
我的业务规则要求按照我向您展示的顺序执行这些查询。但是我认为这个查询不是最优的,因为我需要在查询中使用等于条件。
您知道如何优化我的查询吗?
谢谢。
您不需要第二个 select
语句而是在 update
Output
语句
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
.....
您可以创建一个临时 table,其中包含 table 的主键列。
然后您可以将此临时 table 用作过滤器,这可能比多次应用过滤器谓词更快。
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