如我们可以通过with(index(index_name))来指定对某个索引的使用,从而达到按索引index_name排序。
2.如何没有强制指定索引,不管你的select 语句中是否在where后面使用了索引,Sql Server均可能基于代价对索引的使用进行调整,即使没有where语句也有可能使用索引,即使有where语句也有可能不用索引。不管你的delete 语句中是否在where后面使用了索引,Sql Server均可能基于代价对索引的使用进行调整,即使没有where语句也有可能使用索引,即使有where语句也有可能不用索引。带相同where语句的select 和 delete 执行计划很可能不一样。
因此select 和 delete 得到的记录顺序很可能不一致,如果要选取前n条记录,那么得到的记录集尽管条数一致但内容不一致。尽管我们可以通过with(index(index_name))来强制select对索引的使用,但delete却不能够强制指定索引,因为delete涉及对索引本身的删除。
这种情况下,如果数据库的性能够好,要备份的数据不多,就不要使用set rowcount来控制条数。但如果确需要控制一次删除的条数,可以直接在where条件中控制更小的范围,如时间范围控制到小时,一天的数据通过24小时的循环来备份。
要么采用DTS作备份。
3.如果需要排序的字段是聚簇索引,那么就可以放心使用该索引完成排序。这时,不论执行计划怎样,sql server均按聚簇索引字段顺序返回记录。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/