千家信息网

SQL中有序索引与order by有什么联系

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了SQL中有序索引与order by有什么联系,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一般情况下,order b
千家信息网最后更新 2026年11月03日SQL中有序索引与order by有什么联系

这篇文章主要介绍了SQL中有序索引与order by有什么联系,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一般情况下,order by 有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了。另一个是把结果选好之后再排序。用有序索引这种,当然是最快的,不过有一些限制条件,来看下面的测试。

测试数据:student表有两个字段id ,sid ,id是主键。一共有20W条记录,id从1到200000,sid也是从1到200000的数据。

第一种情况 :

order by的字段不在where条件也不在select中

select sid from zhuyuehua.student where sid < 50000 order by id;



第二种情况 :

order by的字段不在where条件但在select中。

select id,sid from zhuyuehua.student where sid < 50000 order by id;



第三种情况 :

order by的字段在where条件但不在select中。

select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id;



第四种情况 :

order by的字段在where条件但不在select中。倒序排列

select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id desc;



测试结果:

order by的字段不在where条件不在select中 有排序操作

order by的字段不在where条件但在select中 有排序操作

order by的字段在where条件但不在select中 无排序操作

order by的字段在where条件但不在select中(倒序) 无排序操作

结论:

当order by 字段出现在where条件中时,才会利用索引而无需排序操作。其他情况,order by不会出现排序操作。

分析:

为什么只有order by 字段出现在where条件中时,才会利用该字段的索引而避免排序。这要说到数据库如何取到我们需要的数据了。

一条SQL实际上可以分为三步。

1.得到数据

2.处理数据

3.返回处理后的数据

比如上面的这条语句select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id desc

第一步:根据where条件和统计信息生成执行计划,得到数据。

第二步:将得到的数据排序。

当执行处理数据(order by)时,数据库会先查看第一步的执行计划,看order by 的字段是否在执行计划中利用了索引。如果是,则可以利用索引顺序而直接取得已经排好序的数据。如果不是,则排序操作。

第三步:返回排序后的数据。

另外:

上面的5万的数据sort只用了25ms,也许大家觉得sort不怎么占用资源。可是,由于上面的表的数据是有序的,所以排序花费的时间较少。如果 是个比较无序的表,sort时间就会增加很多了。另外排序操作一般都是在内存里进行的,对于数据库来说是一种CPU的消耗,由于现在CPU的性能增强,对 于普通的几十条或上百条记录排序对系统的影响也不会很大。但是当你的记录集增加到上百万条以上时,你需要注意是否一定要这么做了,大记录集排序不仅增加了 CPU开销,而且可能会由于内存不足发生硬盘排序的现象,当发生硬盘排序时性能会急剧下降。

注:ORACLE或者DB2都有一个空间来供SORT操作使用(上面所说的内存排序),如ORACLE中是用户全局区(UGA),里面有SORT_AREA_SIZE等参数的设置。如果当排序的数据量大时,就会出现排序溢出(硬盘排序),这时的性能就会降低很多了。

总结:

当order by 中的字段出现在where条件中时,才会利用索引而不排序,更准确的说,order by 中的字段在执行计划中利用了索引时,不用排序操作。

这个结论不仅对order by有效,对其他需要排序的操作也有效。比如group by 、union 、distinct等。

  • 大小: 16 KB

  • 大小: 16 KB

  • 大小: 20.6 KB

  • 大小: 21 KB


    感谢你能够认真阅读完这篇文章,希望小编分享的"SQL中有序索引与order by有什么联系"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

    排序 数据 字段 条件 索引 有序 情况 大小 篇文章 面的 内存 性能 数据库 硬盘 中时 处理 测试 联系 有效 倒序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 亿人帮互联网科技有限公司 互联网科技工作委员会主任 智能科技公司是互联网公司吗 科技企业和互联网企业 北京互联网科技有限公司 互联网科技公司发展 壹账通互联网科技 碳银互联网科技有限公司 老年人脱离互联网科技的作文 现代科技和互联网有关系吗 顶级互联网科技成果有哪些 茂名市互联网科技产业园 辽宁互联网新科技 银川新华互联网科技学校联系电话 滨湖区互联网智能科技产品有哪些 国大互联网教育科技有限公司薪资 广州梦谷互联网科技有限公司领导 互联网科技品牌 互联网科技大会大佬 保险科技 互联网保险 猪兼强互联网科技 银优互联网科技有限公司 深圳前海聚择互联网科技有限公司 受益于互联网科技的高速发展 美国互联网科技实力 萌小萌互联网科技河南有限公司 长沙易易互联网科技有限公司 网互联网络科技 知域互联网科技有限公司官网
    0