中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-01-15 09:40:55 來源:億速云 閱讀:125 作者:小新 欄目:數據庫

這篇文章主要介紹了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;

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


    感謝你能夠認真閱讀完這篇文章,希望小編分享的“SQL中有序索引與order by有什么聯系”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    穆棱市| 北辰区| 景泰县| 循化| 鄂温| 宽城| 油尖旺区| 宜州市| 湘阴县| 河北区| 田林县| 瑞金市| 洛川县| 辉南县| 凤翔县| 咸丰县| 永济市| 陕西省| 龙口市| 临清市| 张家港市| 民权县| 固原市| 中西区| 肃南| 开原市| 精河县| 宁城县| 临夏市| 嵩明县| 黎川县| 林口县| 师宗县| 浙江省| 奇台县| 即墨市| 景东| 商河县| 万全县| 武冈市| 五家渠市|