【发布时间】:2017-06-06 06:27:20
【问题描述】:
我有一个这样的简单删除语句:
DELETE FROM MY_TABLE WHERE ID='Something'
这只会删除该 ID 的一条记录,这需要一分钟多的时间,因为 MY_TABLE 被在另一个具有大约 4000 万条记录的表上创建的外键引用,并且 DELETE 操作会检查该 ID 是否存在大桌子。
一种方法是删除/重新创建此外键,但此 DELETE 操作由应用程序用户执行,我不能即时删除/重新创建此外键,除非它可能是非工作时间操作。
谁能帮忙?
【问题讨论】:
-
在外键上创建非聚集索引
-
@Vikas verma,使用 where 子句为列创建索引
-
检查此表上的任何触发器或删除子句。
-
在 SQL Server Management Studio 上运行删除命令并检查执行计划。它将向您显示导致延迟的关系/触发器。
-
使用 bigint 的 int 作为 ID 会更好。索引偏离路线。
标签: sql sql-server sql-server-2008