成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

SQL中有序索引與orderby有什么聯(lián)系

這篇文章主要介紹了SQL中有序索引與order by有什么聯(lián)系,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、和龍網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

一般情況下,order by 有兩種實(shí)現(xiàn)方法,一個(gè)是利用有序索引自動實(shí)現(xiàn),也就是說利用有序索引的有序性就不再另做排序操作了。另一個(gè)是把結(jié)果選好之后再排序。用有序索引這種,當(dāng)然是最快的,不過有一些限制條件,來看下面的測試。

測試數(shù)據(jù):student表有兩個(gè)字段id ,sid ,id是主鍵。一共有20W條記錄,id從1到200000,sid也是從1到200000的數(shù)據(jù)。

第一種情況 :

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

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

SQL中有序索引與order by有什么聯(lián)系

第二種情況 :

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

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

SQL中有序索引與order by有什么聯(lián)系

第三種情況 :

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

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

SQL中有序索引與order by有什么聯(lián)系

第四種情況 :

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

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

SQL中有序索引與order by有什么聯(lián)系

測試結(jié)果:

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

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

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

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

結(jié)論:

當(dāng)order by 字段出現(xiàn)在where條件中時(shí),才會利用索引而無需排序操作。其他情況,order by不會出現(xiàn)排序操作。

分析:

為什么只有order by 字段出現(xiàn)在where條件中時(shí),才會利用該字段的索引而避免排序。這要說到數(shù)據(jù)庫如何取到我們需要的數(shù)據(jù)了。

一條SQL實(shí)際上可以分為三步。

1.得到數(shù)據(jù)

2.處理數(shù)據(jù)

3.返回處理后的數(shù)據(jù)

比如上面的這條語句select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id desc

第一步:根據(jù)where條件和統(tǒng)計(jì)信息生成執(zhí)行計(jì)劃,得到數(shù)據(jù)。

第二步:將得到的數(shù)據(jù)排序。

當(dāng)執(zhí)行處理數(shù)據(jù)(order by)時(shí),數(shù)據(jù)庫會先查看第一步的執(zhí)行計(jì)劃,看order by 的字段是否在執(zhí)行計(jì)劃中利用了索引。如果是,則可以利用索引順序而直接取得已經(jīng)排好序的數(shù)據(jù)。如果不是,則排序操作。

第三步:返回排序后的數(shù)據(jù)。

另外:

上面的5萬的數(shù)據(jù)sort只用了25ms,也許大家覺得sort不怎么占用資源??墒牵捎谏厦娴谋淼臄?shù)據(jù)是有序的,所以排序花費(fèi)的時(shí)間較少。如果 是個(gè)比較無序的表,sort時(shí)間就會增加很多了。另外排序操作一般都是在內(nèi)存里進(jìn)行的,對于數(shù)據(jù)庫來說是一種CPU的消耗,由于現(xiàn)在CPU的性能增強(qiáng),對 于普通的幾十條或上百條記錄排序?qū)ο到y(tǒng)的影響也不會很大。但是當(dāng)你的記錄集增加到上百萬條以上時(shí),你需要注意是否一定要這么做了,大記錄集排序不僅增加了 CPU開銷,而且可能會由于內(nèi)存不足發(fā)生硬盤排序的現(xiàn)象,當(dāng)發(fā)生硬盤排序時(shí)性能會急劇下降。

注:ORACLE或者DB2都有一個(gè)空間來供SORT操作使用(上面所說的內(nèi)存排序),如ORACLE中是用戶全局區(qū)(UGA),里面有SORT_AREA_SIZE等參數(shù)的設(shè)置。如果當(dāng)排序的數(shù)據(jù)量大時(shí),就會出現(xiàn)排序溢出(硬盤排序),這時(shí)的性能就會降低很多了。

總結(jié):

當(dāng)order by 中的字段出現(xiàn)在where條件中時(shí),才會利用索引而不排序,更準(zhǔn)確的說,order by 中的字段在執(zhí)行計(jì)劃中利用了索引時(shí),不用排序操作。

這個(gè)結(jié)論不僅對order by有效,對其他需要排序的操作也有效。比如group by 、union 、distinct等。

  • SQL中有序索引與order by有什么聯(lián)系

  • 大小: 16 KB

  • SQL中有序索引與order by有什么聯(lián)系

  • 大小: 16 KB

  • SQL中有序索引與order by有什么聯(lián)系

  • 大小: 20.6 KB

  • SQL中有序索引與order by有什么聯(lián)系

  • 大小: 21 KB

    感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“SQL中有序索引與order by有什么聯(lián)系”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

    網(wǎng)站名稱:SQL中有序索引與orderby有什么聯(lián)系
    瀏覽地址:http://jinyejixie.com/article48/psishp.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站制作網(wǎng)站收錄、移動網(wǎng)站建設(shè)網(wǎng)站營銷、云服務(wù)器

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

    綿陽服務(wù)器托管
    东乡族自治县| 长乐市| 陆河县| 宜兴市| 屯昌县| 礼泉县| 礼泉县| 兴仁县| 申扎县| 开江县| 平果县| 黎川县| 本溪| 天等县| 葫芦岛市| 金山区| 石渠县| 怀来县| 应城市| 越西县| 台南县| 平湖市| 河池市| 贡嘎县| 探索| 阿拉善盟| 阳西县| 永州市| 渝北区| 衡东县| 琼海市| 正安县| 宁乡县| 沂南县| 泰州市| 蚌埠市| 黔西| 龙陵县| 桂平市| 郯城县| 阜南县|