久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL中有序索引與order by有什么聯系

155次閱讀
沒有評論

共計 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字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 闽侯县| 淮南市| 绍兴市| 焉耆| 宜阳县| 宜川县| 瓮安县| 临潭县| 东乌| 琼结县| 海阳市| 城市| 开江县| 九台市| 芒康县| 南陵县| 凤山县| 崇礼县| 连城县| 出国| 阳城县| 磐石市| 兰溪市| 富阳市| 聊城市| 博兴县| 辉县市| 通城县| 阳朔县| 罗江县| 龙川县| 唐河县| 方山县| 辽中县| 搜索| 临夏市| 东安县| 额济纳旗| 吐鲁番市| 阳西县| 阜康市|