分享

关于SQLSERVER的默认排序问题

 icecity1306 2015-04-07
想请教大家一下,SQLSERVER的SELECT TOP和DELETE TOP的默认排序是怎样的,为什么在同一张表里用这两句操作,查询和删除的却是不一样的数据?

影响排序的几个方面(个人总结而已,非官方):
1、where条件,由于数据的分布where条件不同,排序的结果也不一定一样。
2、有无聚集索引,聚集索引的定义语句。
3、order by的列

如果没有聚集索引且没有where条件,那么top的数据是没有保障的。因为一个表是一个“集合”,集合不存在顺序概念。如果要指定顺序,可以使用以下方法:
1、top中使用with tie,具体使用到联机丛书查找即可。
2、建立聚集索引,使表具有可排序性。
3、order by显式调用,不要使用过多默认行为,除非你很清晰地了解SQLServer的内部机制。

插一句题外话,我发现很多开发同事写top的时候省略了括号,但是在后续版本里面这个是建议加上的。对于某些功能实现,括号成了必须,如传入一个变量来实现top多少。这个时候没有括号会报错。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多