加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 主键排序

发布时间:2020-12-12 06:53:15 所属栏目:MsSql教程 来源:网络整理
导读:表是否按照其主键进行内在排序?如果我在BigInt标识列上有一个包含主键的表,我可以相信查询将始终返回按键排序的数据,或者我是否明确需要添加“ORDER BY”.性能差异很大. 解决方法 数据通过聚集索引进行物理存储,聚簇索引通常是主键,但不一定是. 如果没有ORDE
表是否按照其主键进行内在排序?如果我在BigInt标识列上有一个包含主键的表,我可以相信查询将始终返回按键排序的数据,或者我是否明确需要添加“ORDER BY”.性能差异很大.

解决方法

数据通过聚集索引进行物理存储,聚簇索引通常是主键,但不一定是.

如果没有ORDER BY子句,则不保证SQL中的数据具有顺序.当您需要按特定顺序排列数据时,应始终指定ORDER BY子句.如果表已经按这种方式排序,优化器将不会做任何额外的工作,因此将它放在那里是没有害处的.

如果没有ORDER BY子句,RDBMS可能会在等待从磁盘读入记录时返回与您的查询匹配的缓存页面.在这种情况下,即使表上有索引,数据也可能不会以索引的顺序进入. (注意这只是一个例子 – 我不知道甚至认为现实世界的RDBMS会这样做,但它是SQL实现的可接受行为.)

编辑

如果在排序时与不排序时有性能影响,则可能会对没有索引(聚簇或其他)的列(或列集)进行排序.鉴于它是一个时间序列,您可能会根据时间进行排序,但聚集索引位于主要bigint上. SQL Server不知道两者都以相同的方式增加,所以它必须采取一切措施.

如果时间列和主键列是按顺序相关的(当且仅当另一个增加或保持不变时,才会增加),而是按主键排序.如果它们不以这种方式相关,则将聚簇索引从主键移动到您要排序的任何列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读