国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

這篇具有很好參考價(jià)值的文章主要介紹了Mysql高級(jí)3-索引的結(jié)構(gòu)和分類。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、索引概述

  1.1 索引的介紹

    索引index:是幫助 Mysql?高效獲取數(shù)據(jù)?的?有序的數(shù)據(jù)結(jié)構(gòu),在數(shù)據(jù)之外,數(shù)據(jù)庫(kù)系統(tǒng)維護(hù)著的滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指向)數(shù)據(jù),這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn)高級(jí)查找算法,這種數(shù)據(jù)結(jié)構(gòu)就是索引

  1.2 索引的優(yōu)缺點(diǎn)

    • 優(yōu)點(diǎn)1:提高數(shù)據(jù)檢索的效率,降低數(shù)據(jù)庫(kù)的IO成本
    • 優(yōu)點(diǎn)2:通過索引列對(duì)數(shù)據(jù)進(jìn)行排序,降低數(shù)據(jù)排序的成本,降低CPU的消耗
    • 缺點(diǎn)1:索引列也要占磁盤空間。
    • 缺點(diǎn)2:索引大大提高了查詢效率,同時(shí)卻也降低了更新表的速度,如對(duì)表進(jìn)行insert,update,delete時(shí),效率降低

?

二、索引結(jié)構(gòu)

  2.1 Mysql的索引常見結(jié)構(gòu)

    Mysql的索引是在儲(chǔ)存引擎層實(shí)現(xiàn)的,不同的存儲(chǔ)引擎有不同的結(jié)構(gòu),主要包含一下幾種 

    • B+樹:最常見的索引類型,大部分引擎都支持B+樹索引
    • Hash索引:底層數(shù)據(jù)結(jié)構(gòu)是用哈希表實(shí)現(xiàn)的,只有精確匹配索引的查詢才有效,不支持范圍查詢 

?

  2.2 Mysql常見索引對(duì)不同引擎的支持

    • B+樹:InnoDB(支持)、MyISAM(支持)、Memory(支持)
    • Hash索引:InnoDB(不支持)、MyISAM(不支持)、memory(支持)

?

  2.3 二叉樹實(shí)現(xiàn)索引的弊端

    Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

    說明1:實(shí)際中的索引是沒有使用二叉樹的,因?yàn)槎鏄渚哂幸幌碌谋锥恕 ?

    說明2:當(dāng)順序插入時(shí),會(huì)形成一個(gè)鏈表,查詢性能大大降低,大數(shù)據(jù)量的情況下,層級(jí)較深,檢索速度慢。

    說明3:特殊二叉樹紅黑樹當(dāng)做索引是,大數(shù)據(jù)量情況下,層級(jí)比較深,檢索速度慢

?

  2.4 B樹實(shí)現(xiàn)索引的弊端

    以一個(gè)最大度數(shù)(max-degree)為5(5階)的b樹為例(每個(gè)節(jié)點(diǎn)最多儲(chǔ)存4個(gè)key,5個(gè)指針)

    Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

    說明:B樹的數(shù)據(jù)會(huì)存在每個(gè)節(jié)點(diǎn)上,而節(jié)點(diǎn)存在頁(2.6 Mysql索引對(duì)B+樹的優(yōu)化有說明)上面,每頁的大小為16K,這樣每個(gè)頁能存放的索引就比較少,導(dǎo)致同樣數(shù)據(jù)體積小,層級(jí)要比B+樹深。

?

  2.5 B+樹實(shí)現(xiàn)索引

    以一個(gè)最大度數(shù)(max-degree)為4(4階)的b+樹為例

     Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

?

    說明:對(duì)比較與B樹

      1、所有的數(shù)據(jù)都會(huì)出現(xiàn)在葉子節(jié)點(diǎn)上

      2、葉子節(jié)點(diǎn)形成一個(gè)單向鏈表

  2.6 Mysql索引對(duì)B+樹的優(yōu)化

    Mysql索引數(shù)據(jù)結(jié)構(gòu)對(duì)經(jīng)典的B+樹進(jìn)行了優(yōu)化,在原來的B+樹基礎(chǔ)上,增加了一個(gè)指向相鄰葉子節(jié)點(diǎn)的鏈表指針,就行了帶有順序指針的B+樹,提高了區(qū)間訪問的性能

    Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

    說明:每頁在InnoDB中默認(rèn)16K

  

  2.7 hash索引

    哈希索引就是采用一定的hash算法,將鍵值換成新的hash值,映射到對(duì)應(yīng)的槽位上,然后儲(chǔ)存在hash表中

     Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

    說明:如果兩個(gè)(或者多個(gè))鍵映射到同一個(gè)槽位上,他們就產(chǎn)生了hash沖突,也稱hash碰撞,可以通過鏈表來解決

  

  2.8 hash索引特點(diǎn)

    • hash索引只能用于對(duì)等比較(=,in),不支持范圍查詢(between,>,<)
    • 無法利用索引完成排序操作
    • 查詢效率高,通常只需要一次檢索就可以了,效率通常要高于B+樹索引
    • 在Mysql中,支持hash索引的事Memory引擎,而InnoDB中具有自適應(yīng)hash功能,hash索引是存儲(chǔ)引擎根據(jù)B+樹索引在指定條件下自動(dòng)構(gòu)建的

?

?  2.9 InnoDB引擎選擇B+樹的優(yōu)勢(shì)

    • 相對(duì)于二叉樹,層級(jí)更少,搜索效率高
    • 對(duì)于B樹,無論是葉子節(jié)點(diǎn)還是非葉子節(jié)點(diǎn),都會(huì)保存數(shù)據(jù),這樣導(dǎo)致一頁中存儲(chǔ)的鍵值減少,指針跟著減少,同樣保存大量數(shù)據(jù),只能增加樹的高度,導(dǎo)致性能降低。
    • 相對(duì)于hash索引,B+樹支持范圍匹配及排序操作??

?

三、索引分類

  3.1 主鍵索引

    針對(duì)于表中主鍵創(chuàng)建的索引,默認(rèn)自動(dòng)創(chuàng)建,只能有一個(gè), 關(guān)鍵字:primary

  3.2 唯一索引

    避免同一個(gè)表中某數(shù)據(jù)列中的值重復(fù),可以有多個(gè),關(guān)鍵字:unique

  3.3 常規(guī)索引

    快速定位特定數(shù)據(jù),可以有多個(gè),

  3.4 全文索引

    全文索引查找的是文本中的關(guān)鍵字,而不是比較索引中的值,可以有多個(gè),fulltext

  3.5 聚集索引

    在InnoDB中,根據(jù)索引的儲(chǔ)存形式劃分的,將數(shù)據(jù)儲(chǔ)存與索引放到一起,索引結(jié)構(gòu)的葉子節(jié)點(diǎn)保存了行數(shù)據(jù),必須有,而且只有一個(gè)

    • 如果存在主鍵,主鍵索引就是聚集索引
    • 如果不存在主鍵,將使用第一個(gè)唯一(unique)索引作為聚集索引
    • 如果表沒有主鍵,也沒有合適的唯一索引,則InnoDB會(huì)自動(dòng)生成一個(gè)rowid作為隱藏的聚集索引

  3.6 二級(jí)索引

    在InnoDB中,根據(jù)索引的儲(chǔ)存形式劃分的,將數(shù)據(jù)與索引分開儲(chǔ)存,索引結(jié)構(gòu)的葉子節(jié)點(diǎn)關(guān)聯(lián)的是對(duì)應(yīng)的主鍵,可以存在多個(gè)

   Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

?    說明:聚集索引下面存放的是整行的數(shù)據(jù),二級(jí)索引下面存放的對(duì)應(yīng)的主鍵,要不然聚集索引下存放了整行數(shù)據(jù),二級(jí)索引下也放整行數(shù)據(jù),就會(huì)很冗余

  3.7 回表查詢

    Mysql高級(jí)3-索引的結(jié)構(gòu)和分類

    說明1:首先根據(jù)name字段走二級(jí)索引

    說明2:找到Arm對(duì)應(yīng)的id=10

    說明3:然后再根據(jù)id=10找到對(duì)應(yīng)的數(shù)據(jù)

    說明4:整個(gè)過程也叫做回表查詢

?

四、索引語法

  4.1 查看索引

show index from 表名

    示例:

mysql> show index from account;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| account |          0 | PRIMARY  |            1 | id          | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.00 sec)

    說明:account 有一個(gè)主鍵索引

  4.2 創(chuàng)建索引

create [unique | fulltext] index 索引名 on 表名(索引的列名, ..); 

    說明1:如果創(chuàng)建索引的字段是唯一的,值都不重復(fù),可以加unique約束,說明這是一個(gè)唯一字段索引

    說明2:fulltext 是全文檢索索引,主要針對(duì)大的文本字段

mysql> create index name_idx on account(name);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show index from account;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| account |          0 | PRIMARY  |            1 | id          | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| account |          1 | name_idx |            1 | name        | A         |           4 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
2 rows in set (0.01 sec)

    說明1:這就創(chuàng)建了一個(gè)名為name_idx的索引

  4.3 刪除索引

drop index 索引名 on 表名

    示例

mysql> drop index name_idx on account;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show index from account;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| account |          0 | PRIMARY  |            1 | id          | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.00 sec)

    說明:這就刪除了一個(gè)索引

?

五、預(yù)告

  后面的文章會(huì)繼續(xù)介紹索引的使用和設(shè)計(jì)原則文章來源地址http://www.zghlxwxcb.cn/news/detail-607979.html

到了這里,關(guān)于Mysql高級(jí)3-索引的結(jié)構(gòu)和分類的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【MySQL數(shù)據(jù)庫(kù) | 第十七篇】索引以及索引結(jié)構(gòu)介紹

    【MySQL數(shù)據(jù)庫(kù) | 第十七篇】索引以及索引結(jié)構(gòu)介紹

    目錄 前言: 索引簡(jiǎn)介:? 索引結(jié)構(gòu): ? ? ? ? ??二叉樹索引結(jié)構(gòu) ? ? ? ??Tree(普通二叉樹) ? ? ? ??B-Tree(多路平衡查找樹) ? ? ? ??B+Tree ? ? ? ???哈希索引數(shù)據(jù)結(jié)構(gòu) 總結(jié): 在實(shí)際生活中,我們對(duì)SQL語句進(jìn)行優(yōu)化實(shí)際上有很大一部分都是對(duì)索引進(jìn)行優(yōu)化,因此對(duì)索引

    2024年02月09日
    瀏覽(40)
  • MySQL的索引——索引的介紹及其數(shù)據(jù)結(jié)構(gòu)B+樹 & 索引的類型 & 索引的使用及其失效場(chǎng)景 & 相關(guān)名詞解釋

    MySQL的索引——索引的介紹及其數(shù)據(jù)結(jié)構(gòu)B+樹 & 索引的類型 & 索引的使用及其失效場(chǎng)景 & 相關(guān)名詞解釋

    索引是存儲(chǔ)引擎用于快速查找數(shù)據(jù)紀(jì)錄的一種數(shù)據(jù)結(jié)構(gòu),索引是數(shù)據(jù)庫(kù)中經(jīng)常提及的一個(gè)詞,究竟什么是索引,索引的數(shù)據(jù)結(jié)構(gòu)是什么,索引有什么類型? 本篇博客嘗試闡述數(shù)據(jù)庫(kù)索引的相關(guān)內(nèi)容,涉及什么是索引,索引的數(shù)據(jù)結(jié)構(gòu);對(duì)比了聚集索引和非聚集索引,分析了索

    2024年02月20日
    瀏覽(29)
  • MySQL索引概述

    當(dāng)表中的數(shù)據(jù)量到達(dá)幾十萬甚至上百萬的時(shí)候,SQL查詢所花費(fèi)的時(shí)間會(huì)很長(zhǎng),導(dǎo)致業(yè)務(wù)超時(shí)出錯(cuò),此時(shí)就需要用索引來加速SQL查詢。 由于索引也是需要存儲(chǔ)成索引文件的,因此對(duì)索引的使用也會(huì)涉及磁盤I/O操作。如果索引創(chuàng)建過多,使用不當(dāng),會(huì)造成SQL查詢時(shí),進(jìn)行大量無用

    2024年02月03日
    瀏覽(18)
  • 【MySQL高級(jí)】——InnoDB索引&MyISAM索引

    【MySQL高級(jí)】——InnoDB索引&MyISAM索引

    ??MySQL官方對(duì)索引的定義為:索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。 索引的本質(zhì):索引是數(shù)據(jù)結(jié)構(gòu)。你可以簡(jiǎn)單理解為“排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”,滿足特定查找算法。 這些數(shù)據(jù)結(jié)構(gòu)以某種方式指向數(shù)據(jù), 這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實(shí)現(xiàn) 高級(jí)查找

    2023年04月27日
    瀏覽(20)
  • Mysql高級(jí)知識(shí)-------索引

    Mysql高級(jí)知識(shí)-------索引

    mysql索引的創(chuàng)建,新增,刪除,查看 MySQL官方對(duì)索引的定義是: 索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu) 。索引最形象的比喻就是圖書的目錄。注意只有在 大量數(shù)據(jù)中查詢時(shí)索引才顯得有意義 。 在MySQL中索引是在 存儲(chǔ)引擎層實(shí)現(xiàn)的``, 而不是在服務(wù)器層實(shí)現(xiàn)的 ,

    2023年04月26日
    瀏覽(28)
  • MySQL高級(jí)篇——索引簡(jiǎn)介

    ??作者簡(jiǎn)介:數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院學(xué)生、分享學(xué)習(xí)經(jīng)驗(yàn)、生活、 努力成為像代碼一樣有邏輯的人 ??個(gè)人主頁:阿芒的主頁 MySQL官方對(duì) 索引定義: 索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。 索引的本質(zhì): 索引是數(shù)據(jù)結(jié)構(gòu)。 索引的目的: 提高查詢效率,可以類比

    2023年04月08日
    瀏覽(18)
  • MySql索引分類及創(chuàng)建索引的相關(guān)語法

    MySql索引分類及創(chuàng)建索引的相關(guān)語法

    1.1 InnoDB中索引的分類 聚集索引與二級(jí)索引之間的B+樹的結(jié)構(gòu) sql語句索引執(zhí)行的過程講解 根據(jù)id查詢的聚集索引效率要比二級(jí)索引高,故第一條sql的執(zhí)行效率要高于第二條sql的執(zhí)行效率。 如果一個(gè)索引只關(guān)聯(lián)一個(gè)字段,這種索引稱為單列索引,如果一個(gè)索引關(guān)聯(lián)了多個(gè)字段,

    2024年02月16日
    瀏覽(24)
  • MySQL 索引分類

    MySQL 索引分類

    索引的類型和存儲(chǔ)引擎有關(guān),每種存儲(chǔ)引擎所支持的索引類型不一定完全相同。 MySQL 中的索引,可以從 存儲(chǔ)方式 、 使用邏輯 和 實(shí)際使用 等不同角度來進(jìn)行分類 1、按存儲(chǔ)方式區(qū)分 索引本身也很大,不可能全部存儲(chǔ)在內(nèi)存中,因此索引往往以索引文件的形式存儲(chǔ)的磁盤上。

    2024年02月07日
    瀏覽(53)
  • Mysql高級(jí)4-索引的使用規(guī)則

    如果索引了多列(聯(lián)合索引),要遵守最左前綴法則。最左前綴法則指的是查詢從索引的最左列開始,并且不跳過索引中的列,如果跳躍某一列,索引將部分失效(后面的字段索引失效) 示例1:account_transaction表中創(chuàng)建一個(gè)聯(lián)合索引,使用method字段+trader_staff_id字段+operator_s

    2024年02月15日
    瀏覽(15)
  • MySQL 索引的分類和優(yōu)化

    MySQL 索引的分類和優(yōu)化

    ? 優(yōu)質(zhì)博文:IT-BLOG-CN 索引是什么 : MySQL 官方對(duì)索引的定義:索引(Index)是幫助 MySQL 高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)??梢缘玫剿饕谋举|(zhì):索引是數(shù)據(jù)結(jié)構(gòu)。索引的目的在于提高查詢效率??梢院?jiǎn)單理解為,排好序的快速查找數(shù)據(jù)結(jié)構(gòu)。在數(shù)據(jù)之外,數(shù)據(jù)系統(tǒng)還維護(hù)著滿足特

    2024年03月22日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包