站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        MySQL進(jìn)階介紹之索引(總結(jié)分享)

        本篇文章給大家?guī)砹岁P(guān)于mysql的相關(guān)知識(shí),其中主要介紹了關(guān)于索引的相關(guān)內(nèi)容,包括了索引的優(yōu)勢和劣勢、索引的分類、索引的結(jié)構(gòu)以及索引的創(chuàng)建等問題,下面一起來看一下,希望對大家有幫助。

        MySQL進(jìn)階介紹之索引(總結(jié)分享)

        程序員必備接口測試調(diào)試工具:立即使用
        Apipost = Postman + Swagger + Mock + Jmeter
        Api設(shè)計(jì)、調(diào)試、文檔、自動(dòng)化測試工具
        后端、前端、測試,同時(shí)在線協(xié)作,內(nèi)容實(shí)時(shí)同步

        推薦學(xué)習(xí):mysql視頻教程

        索引是什么

        MySQL官方對索引定義:索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
        索引的本質(zhì):索引是數(shù)據(jù)結(jié)構(gòu)。
        索引的目的:提高查詢效率,可以類比字典。

        注:可以將索引簡單的理解為 “排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”。一般來說索引本身也很大,不可能全部存儲(chǔ)在內(nèi)存中,因此索引往往以索引文件的形式存儲(chǔ)的磁盤上

        我們平常所說的索引,如果沒有特別指明,都是指B樹(多路搜索樹,并不一定是二叉的)結(jié)構(gòu)組織的索引。其中聚集索引,復(fù)合索引,前綴索引,唯一索引默認(rèn)都是使用B+樹索引,統(tǒng)稱索引。

        索引的優(yōu)勢和劣勢

        優(yōu)勢

        類似大學(xué)圖書館建書目索引,提高數(shù)據(jù)檢索的效率,降低數(shù)據(jù)庫的IO成本

        通過索引列對數(shù)據(jù)進(jìn)行排序,降低數(shù)據(jù)排序的成本,降低了CPU的消耗

        劣勢

        索引實(shí)際上是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄,所以索引列也會(huì)占用空間

        雖然索引大大提高查詢速度,同時(shí)卻會(huì)降低更新表的速度,如對表進(jìn)行INSERT、UPDATE和DELETE。因?yàn)楦卤頃r(shí),MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件每次更新添加了索引列的字段,都會(huì)調(diào)整因?yàn)楦滤鶐淼逆I值變化后的索引信息

        索引只是提高效率的一個(gè)因素,如果你的MySQL有大數(shù)據(jù)量的表,就需要花時(shí)間研究建立最優(yōu)秀的索引,或優(yōu)化查詢

        MySQL索引分類

        單值索引

        定義:一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引

        注:一般一張表最多而言不要超過5個(gè)索引

        唯一索引

        定義:索引列的值必須唯一,但允許有空值

        復(fù)合索引

        定義:一個(gè)索引包含多個(gè)列

        基本語法

        • 創(chuàng)建

        CREATE [UNIQUE] INDEX indexName ON mytable(columnnname(length));ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnname(length))
        登錄后復(fù)制

        • 刪除

         DROP INDEX [indexName] ON mytable;
        登錄后復(fù)制

        • 查看

        SHOW INDEX FROM table_nameG
        登錄后復(fù)制

        • 使用ALTER命令

        有四種方式添加數(shù)據(jù)表的索引:

        ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):該語句添加一個(gè)主鍵,這意味著索引值必須是唯一的,且不能為NULL。

        ALTER TABLE tbl_name ADD UNIQUE index_name(column_list):這條語句創(chuàng)建索引的值必須是唯一的(除了NULL外,NULL可能會(huì)出現(xiàn)多次)。

        ALTER TABLE tbl_name ADD INDEX index_name(column_list):添加普通索引,索引值可出現(xiàn)多次。

        ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list):該語句指定了索引為FULLTEXT,用于全文索引。

        注:[PRIMARY | UNIQUE | FULLTEXT]: 索引的類型,分別表示唯一索引,全文索引。創(chuàng)建數(shù)據(jù)表時(shí),索引類型可以省略。
        [INDEX | KEY]: 表示指定在數(shù)據(jù)表中創(chuàng)建索引。

        MySQL索引結(jié)構(gòu)

        • BTree索引

        • Hash索引

        • full_text全文索引

        • R-Tree索引

        索引的創(chuàng)建

        哪些情況需要?jiǎng)?chuàng)建索引

        • 主鍵自動(dòng)建立唯一索引

        • 頻繁作為查詢條件的字段應(yīng)該創(chuàng)建索引

        • 查詢中與其它表關(guān)聯(lián)的字段,外鍵關(guān)系建立索引

        • 頻繁更新的字段不適合創(chuàng)建索引,因?yàn)槊看胃虏粏螁问歉掠涗涍€會(huì)更新索引

        • Where條件里用不到的字段不創(chuàng)建索引

        • 單鍵/組合索引的選擇問題(在高并發(fā)下傾向創(chuàng)建組合索引)

        • 查詢中排序的字段,排序字段若通過索引去訪問將大大提高排序速度

        • 查詢中統(tǒng)計(jì)或者分組字段

        哪些情況不適合創(chuàng)建索引

        • 表記錄太少

        • 經(jīng)常增刪改的表

        • 數(shù)據(jù)重復(fù)且分布平均的表字段,因此應(yīng)該只為最經(jīng)常查詢和最經(jīng)常排序的數(shù)據(jù)列建立索引。
          注意,如果某個(gè)數(shù)據(jù)列包含許多重復(fù)的內(nèi)容,為它建立索引就沒有太大的實(shí)際效果

        推薦學(xué)習(xí):mysql視頻教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产玖玖玖九九精品视频| 精品久久久久久久久久中文字幕| 2021年精品国产福利在线 | 精品日产一区二区三区手机| 亚洲精品无码日韩国产不卡?V| 五月花精品视频在线观看| 久久久久成人精品无码中文字幕| 久久精品无码一区二区app| 亚洲精品天天影视综合网| 99香蕉国产精品偷在线观看| 日韩精品无码久久久久久| 免费国产在线精品一区| 中文字幕亚洲精品| 国产精品久久久久…| 久久久久久九九99精品| 3D动漫精品一区二区三区| 精品国产一区二区三区免费| 无码日韩精品一区二区三区免费| 免费观看四虎精品成人| 国产午夜精品一区二区三区不卡| 国产精品视频网站你懂得| 日本午夜精品一区二区三区电影| 日韩一区二区精品观看| 久久久久久无码国产精品中文字幕 | 亚洲国产精品无码久久SM| 久久91这里精品国产2020| 精品国产一区二区三区AV性色| 亚洲国产综合91精品麻豆| 欧美精品免费观看二区| 99久久久精品免费观看国产| 激情亚洲一区国产精品| 久久99精品久久久久久久久久| 日韩精品国产另类专区| 亚洲精品无码成人片在线观看| 一本一道久久a久久精品综合| 在线观看自拍少妇精品| 亚洲精品无码99在线观看| 自拍偷在线精品自拍偷| 亚洲2022国产成人精品无码区 | 国产福利精品在线观看| 中文字幕成人精品久久不卡|