【发布时间】:2017-08-04 06:34:48
【问题描述】:
我有 2 个表,TableA 和 TableB
TableA 包含近 3,000,000 条记录 TableB 包含大约 10,000 条记录
我想删除 TableA 中匹配某个参数的条目。对于较小的表,此查询已正常运行,但在 VB.Net 中运行时出现超时异常
delete FROM TableA WHERE (((TableA.ID) In (SELECT [TableB].ID FROM TableB)) AND ((TableA.EVDATE)='20170720'));
为了看看发生了什么,我在 SSMS 中将其更改为 SELECT * FROM... 并且在 5 分钟没有结果时,我停止了它...
为什么会停止?有没有更好的方法?
我认为这更容易阅读:
delete FROM TableA WHERE TableA.EVDATE='20170720' and TableA.ID In
(SELECT [TableB].ID FROM TableB);
【问题讨论】:
-
仅在需要时使用括号。不必要的括号会使代码笨拙难懂
-
在
TableA.ID和TableA.EVDATE上创建索引将有助于查询运行得更快.. -
另外加入而不是使用
IN可能会更快,您需要尝试一下。 -
我创建了一个非聚集索引,这似乎大大提高了性能。
Create NonClustered Index IX_IndexName On TableA (ID Asc, EVDATE Asc); -
@Tym 我更新了您上面的查询,以便更好地阅读。
标签: sql-server vb.net sql-server-2008-r2