我在包含750 000个条目的表上运行查询时出现性能问题。它需要15到20秒才能执行,在那段时间阻止访问数据库并创建大量错误日志(当然还有愤怒的客户)。需要帮助来提高某些TSQL“不存在”查询性能
下面是该查询:
DECLARE @FROM_ID AS UNIQUEIDENTIFIER = 'XXX'
DECLARE @TO_ID AS UNIQUEIDENTIFIER = 'YYY'
update tbl_share
set user_id = @TO_ID
where user_id = @FROM_ID
and not exists (
select *
from tbl_share ts
where ts.file_id = file_id
and ts.user_id = @TO_ID
and ts.corr_id = corr_id
and ts.local_group_id = local_group_id
and ts.global_group_id = global_group_id
)
我那种坚持,现在因为我的TSQL知识是有限的。 我想知道如果:
- 我应该创建一个临时表
- 我应该选择别的东西比“*”
我没有很多机会来运行测试,因为它的一个生产数据库,并且在白天有永久的10-20个客户连接。
感谢您的帮助!
这似乎是无用的:'和ts.corr_id = corr_id 和ts.local_group_id = local_group_id 和ts.global_group_id = global_group_id' –
@RBarryYoung哦,THX,我会修改我的神话 –
另一种方法通过使用通用表达式(CTE)来提高性能。 @Tim Schmelter:是的。 – sjkm