亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

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

    mysql有索引嗎

    mysql有索引。MySQL中通常有兩種方式訪問(wèn)數(shù)據(jù)庫(kù)表的行數(shù)據(jù):1、順序訪問(wèn),即在表中實(shí)行全表掃描,從頭到尾逐行遍歷,直到在無(wú)序的行數(shù)據(jù)中找到符合條件的目標(biāo)數(shù)據(jù);2、索引訪問(wèn),就是通過(guò)遍歷索引來(lái)直接訪問(wèn)表中記錄行的方式。MySQL索引的數(shù)據(jù)結(jié)構(gòu)可以分為BTree和Hash兩種,BTree又可分為BTree和B+Tree。

    mysql有索引嗎

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

    本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

    MySQL 索引 是什么?

    索引是一種特殊的數(shù)據(jù)庫(kù)結(jié)構(gòu),由數(shù)據(jù)表中的一列或多列組合而成,可以用來(lái)快速查詢數(shù)據(jù)表中有某一特定值的記錄。本節(jié)將詳細(xì)講解索引的含義、作用和優(yōu)缺點(diǎn)。

    通過(guò)索引,查詢數(shù)據(jù)時(shí)不用讀完記錄的所有信息,而只是查詢索引列。否則,數(shù)據(jù)庫(kù)系統(tǒng)將讀取每條記錄的所有信息進(jìn)行匹配。

    可以把索引比作新華字典的音序表。例如,要查“庫(kù)”字,如果不使用音序,就需要從字典的 400 頁(yè)中逐頁(yè)來(lái)找。但是,如果提取拼音出來(lái),構(gòu)成音序表,就只需要從 10 多頁(yè)的音序表中直接查找。這樣就可以大大節(jié)省時(shí)間。

    因此,使用索引可以很大程度上提高數(shù)據(jù)庫(kù)的查詢速度,還有效的提高了數(shù)據(jù)庫(kù)系統(tǒng)的性能。

    為什么要使用索引

    索引就是根據(jù)表中的一列或若干列按照一定順序建立的列值與記錄行之間的對(duì)應(yīng)關(guān)系表,實(shí)質(zhì)上是一張描述索引列的列值與原表中記錄行之間一 一對(duì)應(yīng)關(guān)系的有序表。

    索引是 MySQL 中十分重要的數(shù)據(jù)庫(kù)對(duì)象,是數(shù)據(jù)庫(kù)性能調(diào)優(yōu)技術(shù)的基礎(chǔ),常用于實(shí)現(xiàn)數(shù)據(jù)的快速檢索。

    在 MySQL 中,通常有以下兩種方式訪問(wèn)數(shù)據(jù)庫(kù)表的行數(shù)據(jù):

    1) 順序訪問(wèn)

    順序訪問(wèn)是在表中實(shí)行全表掃描,從頭到尾逐行遍歷,直到在無(wú)序的行數(shù)據(jù)中找到符合條件的目標(biāo)數(shù)據(jù)。

    順序訪問(wèn)實(shí)現(xiàn)比較簡(jiǎn)單,但是當(dāng)表中有大量數(shù)據(jù)的時(shí)候,效率非常低下。例如,在幾千萬(wàn)條數(shù)據(jù)中查找少量的數(shù)據(jù)時(shí),使用順序訪問(wèn)方式將會(huì)遍歷所有的數(shù)據(jù),花費(fèi)大量的時(shí)間,顯然會(huì)影響數(shù)據(jù)庫(kù)的處理性能。

    2) 索引訪問(wèn)

    索引訪問(wèn)是通過(guò)遍歷索引來(lái)直接訪問(wèn)表中記錄行的方式。

    使用這種方式的前提是對(duì)表建立一個(gè)索引,在列上創(chuàng)建了索引之后,查找數(shù)據(jù)時(shí)可以直接根據(jù)該列上的索引找到對(duì)應(yīng)記錄行的位置,從而快捷地查找到數(shù)據(jù)。索引存儲(chǔ)了指定列數(shù)據(jù)值的指針,根據(jù)指定的排序順序?qū)@些指針排序。

    例如,在學(xué)生基本信息表 tb_students 中,如果基于 student_id 建立了索引,系統(tǒng)就建立了一張索引列到實(shí)際記錄的映射表。當(dāng)用戶需要查找 student_id 為 12022 的數(shù)據(jù)的時(shí)候,系統(tǒng)先在 student_id 索引上找到該記錄,然后通過(guò)映射表直接找到數(shù)據(jù)行,并且返回該行數(shù)據(jù)。因?yàn)閽呙杷饕乃俣纫话氵h(yuǎn)遠(yuǎn)大于掃描實(shí)際數(shù)據(jù)行的速度,所以采用索引的方式可以大大提高數(shù)據(jù)庫(kù)的工作效率。

    簡(jiǎn)而言之,不使用索引,MySQL 就必須從第一條記錄開(kāi)始讀完整個(gè)表,直到找出相關(guān)的行。表越大,查詢數(shù)據(jù)所花費(fèi)的時(shí)間就越多。如果表中查詢的列有一個(gè)索引,MySQL 就能快速到達(dá)一個(gè)位置去搜索數(shù)據(jù)文件,而不必查看所有數(shù)據(jù),這樣將會(huì)節(jié)省很大一部分時(shí)間。

    MYSQL 索引 的分類

    1、普通索引 和 唯一索引

    • 普通索引:MySQL 中的基本索引類型,允許在定義索引的列中插入 重復(fù)值 和 空值

    • 唯一索引:要求索引列的值必須 唯一,但允許 有空值

      • 如果是組合索引,則列值的組合必須 唯一
      • 主鍵索引是一種特殊的唯一索引,不允許 有空值

    2、單列索引 和 組合索引

    • 單列索引:一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引
    • 組合索引:在表的 多個(gè)字段 組合上 創(chuàng)建的 索引
      • 只有在查詢條件中使用了這些字段的 左邊字段 時(shí),索引才會(huì)被使用(最左前綴原則)

    3、全文索引

    • 全文索引 的類型為 fulltext
    • 在定義索引的 列上 支持值的全文查找,允許在這些索引列中插入 重復(fù)值 和 空值
    • 全文索引 可以在 char、varchar 和 text 類型的 列 上創(chuàng)建

    4、空間索引

    • 空間索引 是對(duì) 空間數(shù)據(jù)類型 的字段 建立的索引

    • MySQL中的空間數(shù)據(jù)類型有4種,分別是 Geometry、Point、Linestring 和 Polygon

    • MySQL 使用 Spatial 關(guān)鍵字進(jìn)行擴(kuò)展,使得能夠用創(chuàng)建正規(guī)索引類似的語(yǔ)法創(chuàng)建空間索引

    • 創(chuàng)建空間索引的列,不允許為空值,且只能在 MyISAM 的表中創(chuàng)建。

    5、前綴索引

    • 在 char、varchar 和 text 類型的 列 上創(chuàng)建索引時(shí),可以指定索引 列的長(zhǎng)度

    MySQL 索引 的數(shù)據(jù)結(jié)構(gòu)

    ?MySQL 索引 的數(shù)據(jù)結(jié)構(gòu)可以分為 BTree 和 Hash 兩種,BTree 又可分為 BTree 和 B+Tree。

    Hash:使用 Hash 表存儲(chǔ)數(shù)據(jù),Key 存儲(chǔ)索引列,Value 存儲(chǔ)行記錄或行磁盤地址。

    ?Hash 只支持等值查詢(“=”,“IN”,“<=>”),不支持任何范圍查詢(原因在于 Hash 的每個(gè)鍵之間沒(méi)有任何的聯(lián)系),Hash 的查詢效率很高,時(shí)間復(fù)雜度為 O(1)。

    BTree:屬于多叉樹,又名多路平衡查找樹。

    性質(zhì):

    • BTree 的節(jié)點(diǎn)存儲(chǔ)多個(gè)元素( 鍵值 – 數(shù)據(jù) / 子節(jié)點(diǎn) 的地址)
    • BTree 節(jié)點(diǎn)的鍵值按 非降序 排列
    • BTree 所有葉子節(jié)點(diǎn)都位于同一層(具有相同的深度)

    mysql有索引嗎

    查詢過(guò)程,例如:Select * from table where id = 6;

    mysql有索引嗎

    BTree 的不足:

    • 不支持范圍查詢的快速查找(每次查詢都得從根節(jié)點(diǎn)重新進(jìn)行遍歷)
    • 節(jié)點(diǎn)都存儲(chǔ)數(shù)據(jù)會(huì)導(dǎo)致磁盤數(shù)據(jù)存儲(chǔ)比較分散,查詢效率有所降低

    B+Tree:在 BTree 的基本上,對(duì) BTree 進(jìn)行了優(yōu)化:只有葉子節(jié)點(diǎn)才會(huì)存儲(chǔ) 鍵值 – 數(shù)據(jù),非葉子節(jié)點(diǎn)只存儲(chǔ) 鍵值 和 子節(jié)點(diǎn) 的地址;葉子節(jié)點(diǎn)之間使用雙向指針進(jìn)行連接,形成一個(gè)雙向有序鏈表。

    mysql有索引嗎

    等值查詢,例如:Select * from table where id = 8;

    mysql有索引嗎

    范圍查詢,例如:Select * from table where id between 8 and 22;

    mysql有索引嗎

    B+Tree 的優(yōu)點(diǎn):

    • 保證了等值查詢和范圍查詢的快速查找
    • 單一節(jié)點(diǎn)存儲(chǔ)
    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)