在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

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

116次阅读
没有评论

共计 1863 个字符,预计需要花费 5 分钟才能阅读完成。

自动写代码机器人,免费开通

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

一般情况下,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;

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

第二种情况 :

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

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

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

第三种情况 :

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

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

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

第四种情况 :

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

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

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

测试结果:

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 等。

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

大小: 16 KB

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

大小: 16 KB

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

大小: 20.6 KB

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

大小: 21 KB

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

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-16发表,共计1863字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲福利一区福利三区 | 国产欧美一区二区成人影院 | 亚洲欧洲中文日韩久久av乱码 | 高潮迭起av乳颜射后入 | 一级做a爰片久久免费 | 黄动漫视频在线观看 | 成人激情五月天 | 亚洲精品www久久久久久 | 国产足控福利视频入口 | 日韩操| 一区二区视频免费看 | 一级做受毛片免费大片 | 中文天堂资源 | 特级a欧美做爰片三人交 | 伊人久久大香线蕉综合亚洲 | 精品国产粉嫩内射白浆内射双马尾 | 中文人妻无码一区二区三区信息 | 加勒比久草 | 失禁大喷潮在线播放 | 日韩第一视频 | 99热久久精品国 | 亚洲综合日韩久久成人av | 久久这里只有精品23 | 欧美亚洲日本国产综合在线 | 成人黄色在线网站 | 久久久精品日本一区二区三区 | 看日本日日毛片 | 国产国产人免费视频成69大陆 | 亚洲国产精品一区二区第一页 | 91成人免费观看 | 国产精品国产午夜免费福利看 | 黄色丝袜网站 | 精品国产香蕉伊思人在线 | 久久国产精品一区二区 | 激情偷乱在线观看视频播放 | 娜娜麻豆国产电影 | 亚洲国产一区二区a毛片 | 欧美亚洲一二三区 | 婷婷丁香五月激情综合 | 一区二区三区福利视频 | 性视频播放免费视频 |