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

MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!

這篇具有很好參考價值的文章主要介紹了MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??世界上最美好的東西之一,就是你每天都有機會開始全新的一天。??
??作者:不能再留遺憾了??
??專欄:MySQL學(xué)習(xí)??
??本文章主要內(nèi)容:詳細介紹如何查看、創(chuàng)建和刪除MySQL索引,以及MySQL索引的底層原理:B+樹。??
MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!

前言

各位朋友們,大家好!前面我們已經(jīng)介紹了MySQL的庫和表操作,今天我將為大家分享使數(shù)據(jù)庫查詢更加高效的MySQL索引,如果大家覺得博主的文章對你有用的話,記得點個贊哦!??

什么是MySQL索引

MySQL索引是一種用于加速對MySQL數(shù)據(jù)庫表中數(shù)據(jù)的查找的數(shù)據(jù)結(jié)構(gòu)。它可以幫助MySQL數(shù)據(jù)庫在查詢時快速定位到所需數(shù)據(jù),從而提高查詢效率。

MySQL索引基于數(shù)據(jù)表的某一列或多列創(chuàng)建,并按照一定的算法進行排序存儲,以快速地返回符合條件的數(shù)據(jù)。通常情況下,索引可以被創(chuàng)建在表的主鍵列、唯一約束列、普通列上,其中主鍵和唯一約束列上的索引是最常用的。

使用索引可以有效地加快查詢操作的速度,但也會增加寫操作的開銷。因此,在創(chuàng)建索引時需要根據(jù)實際情況進行權(quán)衡考慮。

MySQL索引的作用

1.提高查詢速度:索引可以加速MySQL數(shù)據(jù)庫執(zhí)行SELECT查詢語句的速度。MySQL在查詢時可以利用索引直接定位到所需的數(shù)據(jù)行,而不必遍歷整個數(shù)據(jù)表。

2.保證數(shù)據(jù)的唯一性:在MySQL數(shù)據(jù)庫中,主鍵或唯一約束列上的索引能夠保證數(shù)據(jù)的唯一性,避免重復(fù)數(shù)據(jù)的出現(xiàn)。

3.提高排序速度:當對某一個列進行ORDER BY操作時,MySQL可以利用索引進行快速排序,避免在內(nèi)存中執(zhí)行排序操作所造成的效率低下。

4.加速數(shù)據(jù)表的連接:當數(shù)據(jù)表之間進行JOIN操作時,MySQL可以利用索引快速定位所需數(shù)據(jù),并將其連接成需要的結(jié)果。

MySQL索引適合在哪些場景下使用

因為MySQL索引雖然提高了查詢的效率,但是也需要付出一定的代價。

1.需要付出額外的空間代價來保存索引數(shù)據(jù)
2.索引可能會拖慢新增、刪除、修改的速度

MySQL索引通常在一下場景下使用:

1.經(jīng)常查詢的列:如果一個列經(jīng)常被用于 SELECT 或 WHERE,那么它應(yīng)該被索引。這種情況下,索引可以大大提高查詢的性能。

2.唯一性列:主鍵、唯一性約束條件和外鍵都應(yīng)該創(chuàng)建索引,這可以確保數(shù)據(jù)表的數(shù)據(jù)唯一性,并保證數(shù)據(jù)表間連接的性能。

3.經(jīng)常連接的表:如果兩個或多個表經(jīng)常出現(xiàn)在 JOIN 語句中,那么創(chuàng)建這些表之間連接所需的列上的索引,可以大大提高查詢的性能。

4.經(jīng)常排序的列: 如果一個數(shù)據(jù)表中的某個列經(jīng)常出現(xiàn)在 ORDER BY 子句中,那么索引可以大大提高排序操作的速度。

5.經(jīng)常分組的列: 如果一個數(shù)據(jù)表中的某個列經(jīng)常用于聚合操作(如SUM、COUNT、AVG等),那么索引可以大大提高聚合操作的性能。

如何使用MySQL索引

查看索引

show index from 表名

MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!
每一列所表示的含義:

Table:索引所屬的數(shù)據(jù)表名。
Non_unique:這個索引是否是唯一索引。如果值為0,表示是唯一索引;如果值為1,表示非唯一索引。
Key_name:索引的名稱。
Seq_in_index:索引中字段的位置。索引可以涉及到多個字段,這個字段標識了當前字段在索引中的位置。
Column_name:索引所在的列名。
Collation:索引的字符集。
Cardinality:索引中的唯一值的數(shù)量。
Sub_part:索引使用的列的前綴長度。
Packed:索引是否使用壓縮。
Null:索引是否可以插入空值。
Index_type:索引的類型,可能是BTREE、HASH、FULLTEXT等。
Comment:關(guān)于索引的一些注釋信息。

創(chuàng)建索引

create index 索引名 on 表名(列名);

查看表結(jié)構(gòu)

desc student;

MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!
創(chuàng)建索引并查看

create index index_sn on student(sn);
show index from student;

MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!

刪除索引

drop index 索引名 on 表名
drop index index_sn on student;
show index from student;

MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!

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

MySQL索引的底層結(jié)構(gòu)不是二叉搜索樹和哈希表,而是B+樹。說到B+樹,大家可能都知道還有一個B樹,B+樹是在B樹的基礎(chǔ)上發(fā)展來的。

B樹

??B樹是一種多路查找樹,用于在大小可變的文件中進行查找和排序。B樹通常被用來實現(xiàn)數(shù)據(jù)庫或文件系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu),它具有平衡讀寫性能、支持數(shù)據(jù)的動態(tài)更新和查詢復(fù)雜度低等優(yōu)點。
??B樹的基本思想是將關(guān)鍵字和數(shù)據(jù)元素按序存儲在樹的結(jié)點中,并按特定規(guī)則組織樹形結(jié)構(gòu)。B樹的每個結(jié)點最多可以有m個子樹,若結(jié)點中存儲的關(guān)鍵字數(shù)為n,那么該結(jié)點中應(yīng)有n+1個指向子樹的指針。B樹的關(guān)鍵字按大小順序排列,且結(jié)點中所有關(guān)鍵字不重復(fù)。

下面就是一個簡單的B樹

MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!

B樹的特點:
1.B樹可以高效地支持多路查找。通過對結(jié)點進行平衡,B樹的查找性能穩(wěn)定,在最壞情況下僅需要O(log n)的時間復(fù)雜度即可在樹結(jié)構(gòu)中查找到一個關(guān)鍵字。

2.B樹可以高效地支持數(shù)據(jù)的動態(tài)更新和平衡。通過在插入和刪除操作中對樹的平衡進行自我調(diào)整,B樹能夠高效地對數(shù)據(jù)的動態(tài)更新進行處理。

3.B樹的每個結(jié)點可以存儲更多的關(guān)鍵字和數(shù)據(jù)元素,進而減少磁盤I/O的次數(shù),提高整體的查找和排序性能。

B+樹

B+樹是一種多路查找樹,是B樹的一種變種。B+樹與B樹的主要區(qū)別是:B+樹的非葉子結(jié)點只包含導(dǎo)航信息,不包含實際數(shù)據(jù);B+樹的關(guān)鍵字只出現(xiàn)在葉子結(jié)點中,而且葉子結(jié)點本身按關(guān)鍵字大小順序存儲,且相鄰葉子結(jié)點通過指針連接。

MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!
??B+樹的特點:

1.B+樹的非葉子結(jié)點不存儲數(shù)據(jù),只存儲導(dǎo)航信息。這種設(shè)計可以使得B+樹的內(nèi)部結(jié)構(gòu)更加緊湊,從而減少樹的高度,提高查詢效率。

2.B+樹的所有葉子結(jié)點都包含了相同的信息,因此可以很方便地實現(xiàn)區(qū)間查找或范圍查找。這種設(shè)計也提高了B+樹的查詢性能。

3.類似B樹,B+樹也是平衡樹,每個節(jié)點內(nèi)部都包含多個關(guān)鍵字,能夠有效支持多值查找和排序。

4.B+樹的葉子結(jié)點之間可以用指針串接起來,形成一個有序鏈表,因此可以支持快速的區(qū)間遍歷和排序數(shù)據(jù)。

??B+樹的優(yōu)勢:
1.更快的查找性能:B+樹在非葉子節(jié)點只存儲索引信息,數(shù)據(jù)都存放在葉子節(jié)點中。當進行查找時,只需要從根節(jié)點開始往下遍歷,每個非葉子節(jié)點只需要加載一次就能定位到數(shù)據(jù)所在的葉子節(jié)點,從而大大提高了查詢效率。

2.更高的穩(wěn)定性:B+樹的非葉子節(jié)點只存儲索引,而數(shù)據(jù)都存放在葉子節(jié)點中。當葉子節(jié)點變化時,只會對葉子節(jié)點進行操作,而非葉子節(jié)點不會改變,這種特性大大增加了數(shù)據(jù)結(jié)構(gòu)的穩(wěn)定性,減少了出錯率。

3.適應(yīng)范圍更廣:B+樹能夠適應(yīng)更廣范圍的磁盤IO操作,因為B+樹的葉子節(jié)點都是通過鏈表相互連接的,能夠更加快速地支持區(qū)間查找和遍歷操作,適用于海量數(shù)據(jù)存儲和查詢場景。

4.更高的順序訪問性能:由于B+樹的葉子節(jié)點是按順序進行存儲的,因此能夠更加快速地進行順序遍歷操作,特別是在需要頻繁進行范圍查詢操作的場景,能夠極大地提升性能。

注意

當表中存在一個主鍵索引時,如果還存在另一個索引,那么還是以主鍵索引為主構(gòu)建B+樹,葉子節(jié)點組織所有的數(shù)據(jù)行,而另一個非主鍵索引也會額外構(gòu)架一個B+樹,但是這個 B+ 樹的葉子節(jié)點就不再存儲這一行的完整數(shù)據(jù),而是存主鍵的索引,還需要通過主鍵 索引 去主鍵的 B+ 樹里再查一次(查兩次 B+ 樹),這個過程被稱為回表文章來源地址http://www.zghlxwxcb.cn/news/detail-493079.html

到了這里,關(guān)于MySQL索引:讓你的數(shù)據(jù)庫查詢快到起飛!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【MySQL多表查詢】:讓你的數(shù)據(jù)檢索更高效

    【MySQL多表查詢】:讓你的數(shù)據(jù)檢索更高效

    前言 ? 歡迎來到小K的MySQL專欄,本節(jié)將為大家?guī)?MySQL 中多表查詢相關(guān)知識的講解 一、多表關(guān)系 ?項目開發(fā)中,在進行數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計時,會根據(jù)業(yè)務(wù)需求及業(yè)務(wù)模塊之間的關(guān)系,分析并設(shè)計表結(jié)構(gòu),由于業(yè)務(wù)之間相互關(guān)聯(lián),所以各個表結(jié)構(gòu)之間也存在著各種聯(lián)系,基

    2024年02月09日
    瀏覽(20)
  • 數(shù)據(jù)庫索引優(yōu)化與查詢優(yōu)化——醍醐灌頂

    數(shù)據(jù)庫索引優(yōu)化與查詢優(yōu)化——醍醐灌頂

    哪些維度可以進行數(shù)據(jù)庫調(diào)優(yōu) 索引失效、沒有充分利用到索引-一索引建立 關(guān)聯(lián)查詢太多JOIN (設(shè)計缺陷或不得已的需求) --SQL優(yōu)化 服務(wù)器調(diào)優(yōu)及各個參數(shù)設(shè)置 (緩沖、線程數(shù)等)–調(diào)整my.cnf 數(shù)據(jù)過多–分庫分表 關(guān)于數(shù)據(jù)庫調(diào)優(yōu)的知識點非常分散。不同的 DBMS,不同的公司,不同

    2024年02月15日
    瀏覽(20)
  • MySQL數(shù)據(jù)庫:索引

    MySQL數(shù)據(jù)庫:索引

    ????????索引是一種特殊的文件,包含著對數(shù)據(jù)表里所有記錄的引用指針??梢詫Ρ碇械囊涣谢蚨嗔袆?chuàng)建索引,并指定索引的類型,各類索引有各自的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)。 ? ? ? ? 相當于是給數(shù)據(jù)庫中的數(shù)據(jù)建立了一個目錄,通過目錄可以知道數(shù)據(jù)所在位置,然后到指定位置

    2023年04月17日
    瀏覽(93)
  • 【MySql】數(shù)據(jù)庫索引

    【MySql】數(shù)據(jù)庫索引

    可以簡單理解為一本書的目錄信息,是為了提升查找效率而建立的 1、在創(chuàng)建一個主鍵、唯一鍵、外鍵時候,數(shù)據(jù)庫會自動地針對查找字段設(shè)置索引; 2、在創(chuàng)建表時侯,使用 index 進行普通索引的聲明 3、修改表結(jié)構(gòu),給指定的字段添加索引 alter table 表名 add index 索引名

    2024年02月03日
    瀏覽(94)
  • MySQL數(shù)據(jù)庫索引機制

    MySQL數(shù)據(jù)庫索引機制

    MySQL是一款有客戶端和服務(wù)端的網(wǎng)絡(luò)應(yīng)用,mysql是它的客戶端,mysqld是它的服務(wù)端。服務(wù)端本質(zhì)就是一個進程,它存在于內(nèi)存當中。而我們存儲在MySQL中的數(shù)據(jù)是保存在磁盤上的,當我們對MySQL中數(shù)據(jù)進行增刪查改操作時,不可能是直接在磁盤上進行操作,而是將對應(yīng)的數(shù)據(jù)加

    2024年02月12日
    瀏覽(100)
  • MySQL數(shù)據(jù)庫唯一索引

    MySQL數(shù)據(jù)庫唯一索引

    創(chuàng)建索引是指在某個表的一列或多列上建立一個索引,以便提高對表的訪問速度。創(chuàng)建索引有3種方式,分別是1.創(chuàng)建表的時候創(chuàng)建索引、2.在已經(jīng)存在的表上創(chuàng)建索引和使用3.ALTER TABLE語句來創(chuàng)建索引。 本文福利, 莬 費領(lǐng)取Qt開發(fā)學(xué)習(xí)資料包、技術(shù)視頻,內(nèi)容包括(C++語言基

    2024年02月08日
    瀏覽(96)
  • MySQL數(shù)據(jù)庫索引的數(shù)據(jù)結(jié)構(gòu)

    數(shù)據(jù)庫索引的功能就是讓查找更加的高效,所以索引的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是能夠加速查找的數(shù)據(jù)結(jié)構(gòu)。 MySQL的innoDB存儲引擎的索引的數(shù)據(jù)結(jié)構(gòu)就是多叉搜索樹中的b+樹,這可以說是為索引量身定做的一個數(shù)據(jù)結(jié)構(gòu)。 首先,索引可以通過主鍵,unique修飾創(chuàng)建,也可以直接使用sql語句

    2024年02月10日
    瀏覽(31)
  • 簡單認識MySQL數(shù)據(jù)庫索引

    簡單認識MySQL數(shù)據(jù)庫索引

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 ●索引是一個排序的列表,在這個列表中存儲著索引的值和包含這個值的數(shù)據(jù)所在行的物理地址(類似于C語言的鏈表通過指針指向數(shù)據(jù)記錄的內(nèi)存地址)。 ●使用索引后可以不用掃描全表來定位某行的

    2024年02月16日
    瀏覽(31)
  • 【MySQL數(shù)據(jù)庫 | 第十七篇】索引以及索引結(jié)構(gòu)介紹

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

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

    2024年02月09日
    瀏覽(40)
  • 【MySql系列】深入解析數(shù)據(jù)庫索引

    【MySql系列】深入解析數(shù)據(jù)庫索引

    MySQL索引是數(shù)據(jù)庫中一個關(guān)鍵的概念,它可以極大地提高查詢性能,加快數(shù)據(jù)檢索速度。但是,要充分發(fā)揮索引的作用,需要深入理解它們的工作原理和使用方式。 在本文中,我們將深入解析MySQL索引,探討它們的重要性、類型、創(chuàng)建、維護以及最佳實踐。 在數(shù)據(jù)庫中,索引

    2024年02月08日
    瀏覽(32)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包