删除'WITH INDEX'SQL查询

时间:2017-11-02 09:35:27

标签: sql sql-server sql-delete

正常删除:

DELETE 
FROM Table
WHERE   column1 =   'some value'

删除索引:

DELETE  Table1
FROM    Table1  WITH(INDEX(PK_Table1))
WHERE   column1 =   'some value'

我知道当你从表中删除一行时,它会搜索所有的引用表,这会减慢删除执行的速度。

如何使用WITH INDEX进行删除?

1 个答案:

答案 0 :(得分:2)

WITH(INDEX(PK_Table1))是一个索引提示;即告诉SQL使用特定索引而不是尝试确定最佳索引。通常不需要索引提示; SQL非常擅长知道什么是最好的;并且没有花费太多时间来计算最佳索引,因为它回忆起上次使用哪个索引时有类似的查询。

在某些情况下,SQL可能会出错;对于那些你可以通过添加提示来提高性能的人。这些案件非常罕见。在这种情况下,要彻底测试,并尽可能接近真实世界的数据(因为表中的数据会影响查询在每个索引下的执行情况

除非您发现真正的性能问题,否则

可以证明你的提示有帮助,不要使用提示。

这里有关于提示的相关帖子,它很好地总结了这个论点:https://www.brentozar.com/archive/2013/10/index-hints-helpful-or-harmful/