SQL - 提高NOT EXISTS查询性能
-
23-08-2019 - |
题
有没有一种办法可以改善这种SQL查询性能:
INSERT
INTO ...
WHERE NOT EXISTS(Validation...)
问题是,当我在我的表中的许多数据(如行万美元),如果很慢的WHERE NOT EXISTS
条款的执行。我必须这样做,因为验证我不能插入重复数据。
我使用的SQLServer 2005
THX
解决方案
请确保您正在搜索的索引列,没有操纵这些列中的数据(如串等)
其他提示
关闭我的头顶,你可以尝试这样的:
TRUNCATE temptable
INSERT INTO temptable ...
INSERT INTO temptable ...
...
INSERT INTO realtable
SELECT temptable.* FROM temptable
LEFT JOIN realtable on realtable.key = temptable.key
WHERE realtable.key is null
尝试更换NOT EXISTS与左外连接,它有时执行在大的数据集更好。
注重关于索引对方的回答。 NOT EXISTS通常是相当快的,如果你有很好的索引。
但我的的曾与语句的性能问题像你描述。我用绕过一个方法是使用临时表的候选值,执行DELETE FROM ... WHERE EXISTS(...),然后盲目地插入剩余部分。在事务内,当然,为了避免竞争条件。分裂有时查询允许优化做的工作没有得到混淆。
如果你可以在所有减少你的问题的空间,那么你将获得的性能堆。你绝对相信,需要检查该表中的行中的每一个?
您可能想尝试的另一件事是您的插入前DELETE InsertTable FROM InsertTable INNER JOIN ExistingTable ON <Validation criteria>
。然而,你可能会有所不同
insert into customers
select *
from newcustomers
where customerid not in (select customerid
from customers)
..可能更有效。正如其他人所说,作出任何查找字段确保你有索引。
不隶属于 StackOverflow