輕松優(yōu)化MySQL-之索引優(yōu)化1

什么是索引?為什么要建立索引

索引用于快速找出在某個列中有一特定值的行唇聘,不使用索引MySQL必須從第一條記錄開始讀完整個表楔绞,直到找出相關(guān)的行慎菲,表越大查詢數(shù)據(jù)所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索數(shù)據(jù)文件厦坛,而不必查看所有數(shù)據(jù)五垮,那么將會節(jié)省很大一部分時間。

例如:有一張person表杜秸,其中有2W條記錄放仗,記錄著2W個人的信息。有一個Phone的字段記錄每個人的電話號碼撬碟,現(xiàn)在想要查詢出電話號碼為xxxx的人的信息诞挨。

如果沒有索引,那么將從表中第一條記錄一條條往下遍歷呢蛤,直到找到該條信息為止惶傻。

如果有了索引,那么會將該Phone字段其障,通過一定的方法進行存儲银室,好讓查詢該字段上的信息時,能夠快速找到對應的數(shù)據(jù)静秆,而不必在遍歷2W條數(shù)據(jù)了粮揉。其中MySQL中的索引的存儲類型有兩種:BTREE、HASH抚笔。 也就是用樹或者Hash值來存儲該字段扶认,要知道其中詳細是如何查找的,需要一定的算法知識了殊橙。

B-Tree

B-Tree索引辐宾,它是目前關(guān)系型數(shù)據(jù)庫中查找數(shù)據(jù)最為常用和有效的索引,大多數(shù)存儲引擎都支持這種索引膨蛮。使用B-Tree這個術(shù)語叠纹,是因為MySQL在CREATE TABLE或其它語句中使用了這個關(guān)鍵字,但實際上不同的存儲引擎可能使用不同的數(shù)據(jù)結(jié)構(gòu)敞葛,比如InnoDB就是使用的B+Tree誉察。

B+Tree中的B是指balance,意為平衡惹谐。需要注意的是持偏,B+樹索引并不能找到一個給定鍵值的具體行,它找到的只是被查找數(shù)據(jù)行所在的頁氨肌,接著數(shù)據(jù)庫會把頁讀入到內(nèi)存鸿秆,再在內(nèi)存中進行查找,最后得到要查找的數(shù)據(jù)怎囚。

image.png

InnoDB聚簇索引(clustered index)

聚簇索引保證關(guān)鍵字的值相近的元組存儲的物理位置也相同(所以字符串類型不宜建立聚簇索引卿叽,特別是隨機字符串,會使得系統(tǒng)進行大量的移動操作),且一個表只能有一個聚簇索引考婴。因為由存儲引擎實現(xiàn)索引贩虾,所以,并不是所有的引擎都支持聚簇索引蕉扮。

聚簇索引:

image.png

二級索引:

image.png

索引的優(yōu)點和缺點

優(yōu)點

1整胃、所有的MySql列類型(字段類型)都可以被索引,也就是可以給任意字段設置索引

2喳钟、大大加快數(shù)據(jù)的查詢速度

缺點

1、創(chuàng)建索引和維護索引要耗費時間在岂,并且隨著數(shù)據(jù)量的增加所耗費的時間也會增加

2奔则、索引也需要占空間,我們知道數(shù)據(jù)表中的數(shù)據(jù)也會有最大上線設置的蔽午,如果我們有大量的索引易茬,索引文件可能會比數(shù)據(jù)文件更快達到上線值

3、當對表中的數(shù)據(jù)進行增加及老、刪除抽莱、修改時,索引也需要動態(tài)的維護骄恶,降低了數(shù)據(jù)的維護速度食铐。

使用原則

通過上面說的優(yōu)點和缺點,我們應該可以知道僧鲁,并不是每個字段度設置索引就好虐呻,也不是索引越多越好,而是需要自己合理的使用寞秃。

并不是所有索引對查詢都有效

并不是所有索引對查詢都有效斟叼,SQL是根據(jù)表中數(shù)據(jù)來進行查詢優(yōu)化的,當索引列有大量數(shù)據(jù)重復時春寿,SQL查詢可能不會去利用索引朗涩,如一表中有字段 sex,male绑改、female幾乎各一半谢床,那么即使在sex上建了索引也對查詢效率起不了作用。

索引并不是越多越好

索引固然可以提高相應的 select 的效率绢淀,但同時也降低了 insert 及 update 的效率萤悴,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮皆的,視具體情況而定覆履。一個表的索引數(shù)較好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有必要。

避免更新聚簇索引數(shù)據(jù)列

應盡可能的避免更新 clustered 索引數(shù)據(jù)列硝全,mysql默認的clustered索引為主鍵栖雾,因為 clustered 索引數(shù)據(jù)列的順序就是表記錄的物理存儲順序,一旦該列值改變將導致整個表記錄的順序的調(diào)整伟众,會耗費相當大的資源析藕。若應用系統(tǒng)需要頻繁更新 clustered 索引數(shù)據(jù)列,那么需要考慮是否應將該索引建為 clustered 索引凳厢。

經(jīng)常更新的表就避免對其進行過多的索引

對經(jīng)常更新的表就避免對其進行過多的索引账胧,對經(jīng)常用于查詢的字段應該創(chuàng)建索引。

數(shù)據(jù)量小的表最好不要使用索引

數(shù)據(jù)量小的表最好不要使用索引先紫,因為由于數(shù)據(jù)較少治泥,可能查詢?nèi)繑?shù)據(jù)花費的時間比遍歷索引的時間還要短,索引就可能不會產(chǎn)生優(yōu)化效果遮精。

避免在不同值少的列上加索引

在一不同值少的列上(字段上)不要建立索引居夹,比如在學生表的"性別"字段上只有男,女兩個不同值本冲。相反的准脂,在一個字段上不同值較多可以根據(jù)需要建立索引。

根據(jù)業(yè)務需求建立索引

索引的建立要根據(jù)業(yè)務特點進行檬洞,不能憑空想象的設置索引狸膏。經(jīng)常作為查詢條件的列才有建立索引的必要性。

上一篇 《性能優(yōu)化系列文章目錄》 下一篇
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疮胖,一起剝皮案震驚了整個濱河市环戈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澎灸,老刑警劉巖院塞,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異性昭,居然都是意外死亡拦止,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門糜颠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汹族,“玉大人,你說我怎么就攤上這事其兴《ヂ鳎” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵元旬,是天一觀的道長榴徐。 經(jīng)常有香客問我守问,道長,這世上最難降的妖魔是什么坑资? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任耗帕,我火速辦了婚禮,結(jié)果婚禮上袱贮,老公的妹妹穿的比我還像新娘仿便。我一直安慰自己,他們只是感情好攒巍,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布嗽仪。 她就那樣靜靜地躺著,像睡著了一般窑业。 火紅的嫁衣襯著肌膚如雪钦幔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天常柄,我揣著相機與錄音,去河邊找鬼搀擂。 笑死西潘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哨颂。 我是一名探鬼主播喷市,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼威恼!你這毒婦竟也來了品姓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤箫措,失蹤者是張志新(化名)和其女友劉穎腹备,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斤蔓,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡植酥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弦牡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片友驮。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驾锰,靈堂內(nèi)的尸體忽然破棺而出卸留,到底是詐尸還是另有隱情,我是刑警寧澤椭豫,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布耻瑟,位于F島的核電站旨指,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏匆赃。R本人自食惡果不足惜淤毛,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望算柳。 院中可真熱鬧低淡,春花似錦、人聲如沸瞬项。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囱淋。三九已至猪杭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妥衣,已是汗流浹背皂吮。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留税手,地道東北人蜂筹。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像芦倒,于是被迫代替她去往敵國和親艺挪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容