日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

組合列mysql下的索引使用原則

系統(tǒng) 2563 0

每日一貼,今天的內(nèi)容關(guān)鍵字為組合列

????

為表建立索引,無疑是對數(shù)據(jù)庫比較好的優(yōu)化方法之一。以下是自己對索引的總結(jié)。

????

?

????

MYSQL QUERY Optimizer對索引的選擇

????

1.即使一個SQL可以選擇多個索引,但是大多數(shù)情況下它都市選擇一個索引,而廢棄其它的索引。

????

應(yīng)用索引的前提:

????

1.索引的存是在where條件之后的。

????

2.在MYSQL中不同的存儲引擎對索引的看待也是有點不一樣的。

????

?

????

?

????

經(jīng)常使用的索引類型以及情況

????


????

前綴索引(又叫短索引)

????

對串列停止索引,如果可能應(yīng)該指定一個前綴長度。例如,如果有一個CHAR(255)的 列,如果在前10 個或20 個字符內(nèi),多數(shù)值是唯一的,那么就不要對整個列停止索引。短索引不僅可以提高查詢速度而且可以節(jié)儉磁盤空間和I/O操作。

????

示例代碼:

    //創(chuàng)建短索引
  
    
      create
    
  

???? index

????ix_test

???? on

????t(col(200))

  
    //適用的情況
  
    
      SELECT
    
  

????userName,income

???? FROM

????t

???? WHERE

????col

???? like

????'

???? john%

????';

  

????

也就是說: 短索引的適用范圍主要是在like之后第一個非’%’的實例。

????

?

????

?

????

組合索引

????


????

比如有一條語句是這樣的:select * from users where area=’beijing’ and age=22;
如果我們是在area和age上分別創(chuàng)建單個索引的話,由于mysql查詢每次只能應(yīng)用一個索引,所以雖然這樣已經(jīng)相對不做索引時全表掃描提高了很多效率,但是如果在area、age兩列上創(chuàng)建復(fù)合索引的話將帶來更高的效率。如果我們創(chuàng)建了(area, age, salary)的復(fù)合索引,那么其實相當(dāng)于創(chuàng)建了( area ,age,salary)、( area ,age)、( area )三個索引,這被稱為最好左前綴特性。

????

對于組合索引,MYSQL數(shù)據(jù)庫所停止查詢的道理:

????每日一道理
即使青春是一枝嬌艷的花,但我明白,一枝獨放永遠不是春天,春天該是萬紫千紅的世界。 即使青春是一株大地偉岸的樹,但我明白,一株獨秀永遠不是挺拔,成行成排的林木,才是遮風(fēng)擋沙的綠色長城。即使青春是一葉大海孤高的帆,但我明白,一葉孤帆很難遠航,千帆競發(fā)才是大海的壯觀。
    
      select
    
  

????*

???? from

????users

???? where

????area=’beijing’

???? and

????age=22;

  
    
      select
    
  

????*

???? from

????users

???? where

????area=’beijing’;

  
    如果area有索引,則以上的SQL語句都市應(yīng)用索引,因為組合索引有最好左前綴的特性,而select *
  

???? from

????users

???? where

????age=22; 則不會應(yīng)用索引。

  

????

?

????

因此我們在創(chuàng)建復(fù)合索引時應(yīng)該將最經(jīng)常使用作限制條件的列放在最左邊,依次遞減。

????

?

????

?

????

單鍵索引還是組合索引

????


????

在一般的應(yīng)用場景中, 只要不是其中某個過濾字段在大多數(shù)場景下能過濾90%以上的數(shù)據(jù)( 這類可能性很小 ),而其他的過濾字段會頻繁的更新,一般更傾向于創(chuàng)建組合索引,尤其是在并發(fā)量較高的場景下 。因為當(dāng)并發(fā)量較高的時候,即使只為每一個Query節(jié)儉了很少的 IO 消費,但因為執(zhí)行量非常大,所節(jié)儉的資源總量仍然是非常可觀的。

????

?

????

當(dāng)然, 創(chuàng)建組合索引并不是說就須要將查詢條件中的所有字段都放在一個索引中,還應(yīng)該盡量讓一個索引被多個 Query 語句利用,盡量減少同一個表上的索引數(shù)量 ,減少因為數(shù)據(jù)更新帶來的索引更新本錢,同時還可以減少因為索引所消費的存儲空間。

????

?

????

有OR在SQL語句中來應(yīng)用索引的情況

????


????

如果有or,where前面就必須全面條件有索引,否則索引將不會起作用,所以必定要為or的全部字段創(chuàng)建索引

????

SELECT * FROM test WHERE last_name='Widenius' OR first_name='Michael';

????

?

????

?

????

ordery by以及索引排序

????


????

mysql查詢只應(yīng)用一個索引,因此如果where子句中已經(jīng)應(yīng)用了索引的話,那么order by中的列是不會應(yīng)用索引的。

????

因此數(shù)據(jù)庫默認(rèn)排序可以符合要求的情況下不要應(yīng)用排序操作;(排序功能由索引來實現(xiàn)) 盡量不要包括多個列的排序,如果需要最好給這些列創(chuàng)建復(fù)合索引。

文章結(jié)束給大家分享下程序員的一些笑話語錄: 程序員的愿望
  有一天一個程序員見到了上帝.上帝: 小伙子,我可以滿足你一個愿望.程序員: 我希望中國國家隊能再次打進世界杯.
  上帝: 這個啊!這個不好辦啊,你還說下一個吧!
  程序員: 那好!我的下一個愿望是每天都能休息6個小時以上.
  上帝: 還是讓中國國家打進世界杯.

組合列mysql下的索引使用原則


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 宁蒗| 许昌市| 邵武市| 孟村| 镇安县| 湛江市| 垫江县| 庄浪县| 宁安市| 榆社县| 繁峙县| 台中县| 定州市| 马山县| 佛山市| 元江| 泰宁县| 河南省| 观塘区| 黑河市| 博客| 四平市| 大渡口区| 湘潭市| 海宁市| 吉林省| 临桂县| 盖州市| 大冶市| 托克托县| 石河子市| 肥东县| 汉川市| 神木县| 竹溪县| 朝阳区| 德阳市| 青海省| 米易县| 南靖县| 上虞市|