【发布时间】:2020-07-26 10:24:52
【问题描述】:
我有 2 个表,其中一个学生姓名有 35 M 行,另一个表(名称为索引)有 1500 行。
当我使用这个查询时:
SELECT DISTINCT family
FROM [DBName].[dbo].[student]
运行并返回结果大约需要 3 秒(假设它有 3500 万行,但很快就会返回结果)。
但是当我跑步时
DELETE FROM [DBName].[dbo].[index]
WHERE family NOT IN (SELECT DISTINCT family FROM [DBName].[dbo].[student])
这很慢,我等了三十分钟,但还没有完成。
为什么?
【问题讨论】:
-
如果定义了外键,引擎需要检查这个外键。当您没有此外键列的索引时,这将非常慢。同样使用
not exists代替not in可能会提高性能。
标签: sql-server performance sql-delete