<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL優(yōu)化之你真的會(huì)用索引嗎?

          共 1869字,需瀏覽 4分鐘

           ·

          2020-09-26 13:19

          點(diǎn)擊上方SQL數(shù)據(jù)庫(kù)開發(fā),關(guān)注獲取SQL視頻教程


          SQL專欄

          SQL基礎(chǔ)知識(shí)匯總

          SQL高級(jí)知識(shí)匯總

          提到索引,想必小伙伴們都知道,它是為了提高查詢效率而生。但是在查詢過程中,怎么才能讓我們的查詢語句使用到索引?相必大家或多或少都會(huì)遇到這樣的問題。今天我們就來回答這個(gè)問題。



          1

          ? ?聚集索引和非聚集索引


          索引一般分為聚集索引和非聚集索引。

          聚集索引速度很快,但只能建一個(gè),所以盡量把經(jīng)常使用的列建成聚集索引。

          非聚集索引雖然沒聚集索引快,但是可以建多個(gè),比全表掃描快。



          2

          ?如何建立高效的索引


          A.關(guān)聯(lián)條件上建立索引

          例如:
          SELECT ?* FROM ?T1
          JOIN ?T2 ON ?T1.ORDER_ID=T2.ORDER_ID;
          在關(guān)聯(lián)條件ON后面的兩個(gè)列就可以分別建立索引,這樣會(huì)很快將符合關(guān)聯(lián)條件的數(shù)據(jù)查詢出來。
          B.在條件查詢上建立索引
          例如:
          SELECT * FROM T1?
          WHERE ?T1.PRICE>20;
          在WHERE條件PRICE列上就可以建立索引。
          注意:以下幾種情況不會(huì)使用索引
          • 在索引列上使用了運(yùn)算符的,
            例如:T1.PRICE*0.5>20,這種不會(huì)使用索引
          • 在索引列上使用了函數(shù)的,
            例如:UPPER(T1.ADDRESS)='NEWYORK',也不會(huì)使用索引
          • 在使用索引時(shí)存在空值NULL的,
            例如:T1.ADDRESS IS NULL,那么在查詢時(shí)就不會(huì)走索引了
          • 字符型數(shù)據(jù)不加引號(hào)也不會(huì)使用索引
            例如:ORDER_ID原本是字符型,T1.ORDER_ID='112'會(huì)使用索引,但是如果去掉引號(hào),變成了T1.ORDER_ID=112,查詢語句不會(huì)報(bào)錯(cuò),但是不會(huì)使用索引了。
          • 或(OR)和不等(<>,!=)以及NOT IN等這些也不會(huì)使用索引
          • 經(jīng)常使用的LIKE,除了前置匹配,其他匹配均不走索引
            例如:T1.ADDRESS LIKE ‘NEW%’,這個(gè)走索引,但是像
            T1.ADDRESS LIKE ‘%NEW%’和T1.ADDRESS LIKE ‘%NEW’則均不走索引了
          • 最后如果查詢優(yōu)化器判斷全表掃描比走索引還快也不會(huì)使用到索引。
          C.建立索引的原則
          • 不頻繁寫入和更新的列適合建立索引
          • 經(jīng)常查詢的列適合建立索引
          • 重復(fù)數(shù)據(jù)較少的可以建立索引
          D.聯(lián)合索引的妙用
          聯(lián)合索引就是幾個(gè)列合在一起組成一個(gè)索引,這種在WHERE條件中相比單列索引會(huì)起到意想不到效果。
          例如:
          SELECT * FROM T1 WHERE T1.CITY=‘北京’ AND T1.DISTR='海淀區(qū)';
          這個(gè)時(shí)候?qū)⒘蠧ITY和DISTR建立成一個(gè)聯(lián)合索引,效果會(huì)更好。
          注意:聯(lián)合索引需要按順序走,如果中間某個(gè)索引不能使用,那它之后的列均不會(huì)使用索引。
          例如:
          SELECT * FROM T1?
          WHERE T1.CITY=‘北京’
          AND LEFT(T1.DISTR,3)='海淀區(qū)'?
          AND T1.ROAD='#10'
          如果我們將CITY,DISTR,ROAD建立成為聯(lián)合索引,由于索引的前置規(guī)則,只會(huì)讓CITY走索引,后面的DISTR因?yàn)槭褂昧撕瘮?shù),索引失效,最后的ROAD列因?yàn)镈ISTR的失效也會(huì)跟著失效,這里記住即可。



          3

          什么情況不適合建立索引


          由于創(chuàng)建索引和維護(hù)索引耗時(shí),時(shí)間隨著數(shù)據(jù)的增加而增加,成正比;需要占物理空間;當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行維護(hù)時(shí),對(duì)索引也要進(jìn)行維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。基于這些缺點(diǎn),以下情況不適合建立索引

          • 對(duì)于在查詢過程中很少使用或參考的列,不應(yīng)該創(chuàng)建索引。

          • 對(duì)于那些只有很少數(shù)據(jù)值的列,不應(yīng)該創(chuàng)建索引,例如:性別。

          • 對(duì)于那些定義為image,text和bit數(shù)據(jù)類型的列,不應(yīng)該創(chuàng)建索引。

          • 當(dāng)修改性能遠(yuǎn)大于檢索性能,不應(yīng)該建立索引。

          • 重復(fù)值較多的也不適合建立索引。


          好了,今天的索引就講到這里,對(duì)優(yōu)化感興趣的小伙伴,可以加入我們的微信群,大家一起交流學(xué)習(xí)。


          ——End——

          后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
          后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。
          推薦閱讀
          這是一個(gè)能學(xué)到技術(shù)的公眾號(hào),歡迎關(guān)注
          點(diǎn)擊「閱讀原文」了解SQL訓(xùn)練營(yíng)

          瀏覽 65
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  干少妇电影无码 | 青草草视频精品视频免费观看 | 在线 中文字幕 日韩 | 欧美色女人| 日韩 欧美中文字幕第一页在线 |