• 如果不写Order By子句,会怎么样


    我们都知道在T-SQL查询中,如果不恰当地使用了Order By子句,那么将严重影响到性能。很多优化顾问都会把尽量减少使用order by作为一条建议。

    但又有人转念一想,如果我们在查询中不写Order By子句,那么出来的结果到底会怎么样排序呢?你要知道,即便再怎么样,数据结果集还是得有一个顺序的。那么这个无形的顺序是由什么决定的呢?

    这个问题的答案得从两个方面来说

    1. 如果表拥有聚集索引,那么就会按照聚集索引,升序(ASC)

    2. 如果表不拥有聚集索引,那么就不好说了。实际上,这种情况下数据出来的顺序是随机的,它主要与SQL Server读取数据的顺序有关。

    我们可以来看一个例子

    我有一个测试的表,叫Orders,里面只有一个列。我随机输入了一些数字。【注意:我是故意让数字交错的】

    image

    如果,我们没有在表上面设计聚集索引,那么

    SELECT [ID]
      FROM [demo].[dbo].[Orders]

    的结果就和上面是一样的。【也许在某些时候会不一样,但这个不太好测试,在表的数据很多或者用户并发很多的情况下可能会出现】

    我觉得这个顺序通常会跟我们insert数据的先后有关系的。

     

    但是,如果我们在表上面添加一个聚集索引,指定ID为键列

    image

    此时,你再执行同样的查询语句,却可以看到下面的结果

    image

    下面这个是执行计划

    image

  • 相关阅读:
    [转]Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)
    [转]PIL、Pillow安装使用方法
    [转]痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)
    如何选择开源许可证?
    年复一年
    [转]TLD目标跟踪算法
    [转]pycharm中将ui文件转换成py文件
    ps矫正倾斜的扫描件内容
    ORM增删改查
    ORM配置
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1439436.html
Copyright © 2020-2023  润新知