久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql有沒有索引

164次閱讀
沒有評論

共計 2457 個字符,預計需要花費 7 分鐘才能閱讀完成。

本篇內容主要講解“mysql 有沒有索引”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“mysql 有沒有索引”吧!

mysql 有索引。MySQL 中通常有兩種方式訪問數據庫表的行數據:1、順序訪問,即在表中實行全表掃描,從頭到尾逐行遍歷,直到在無序的行數據中找到符合條件的目標數據;2、索引訪問,就是通過遍歷索引來直接訪問表中記錄行的方式。MySQL 索引的數據結構可以分為 BTree 和 Hash 兩種,BTree 又可分為 BTree 和 B +Tree。

MySQL 索引 是什么?

索引是一種特殊的數據庫結構,由數據表中的一列或多列組合而成,可以用來快速查詢數據表中有某一特定值的記錄。本節將詳細講解索引的含義、作用和優缺點。

通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列。否則,數據庫系統將讀取每條記錄的所有信息進行匹配。

可以把索引比作新華字典的音序表。例如,要查“庫”字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節省時間。

因此,使用索引可以很大程度上提高數據庫的查詢速度,還有效的提高了數據庫系統的性能。

為什么要使用索引

索引就是根據表中的一列或若干列按照一定順序建立的列值與記錄行之間的對應關系表,實質上是一張描述索引列的列值與原表中記錄行之間一 一對應關系的有序表。

索引是 MySQL 中十分重要的數據庫對象,是數據庫性能調優技術的基礎,常用于實現數據的快速檢索。

在 MySQL 中,通常有以下兩種方式訪問數據庫表的行數據:

1) 順序訪問

順序訪問是在表中實行全表掃描,從頭到尾逐行遍歷,直到在無序的行數據中找到符合條件的目標數據。

順序訪問實現比較簡單,但是當表中有大量數據的時候,效率非常低下。例如,在幾千萬條數據中查找少量的數據時,使用順序訪問方式將會遍歷所有的數據,花費大量的時間,顯然會影響數據庫的處理性能。

2) 索引訪問

索引訪問是通過遍歷索引來直接訪問表中記錄行的方式。

使用這種方式的前提是對表建立一個索引,在列上創建了索引之后,查找數據時可以直接根據該列上的索引找到對應記錄行的位置,從而快捷地查找到數據。索引存儲了指定列數據值的指針,根據指定的排序順序對這些指針排序。

例如,在學生基本信息表 tb_students 中,如果基于 student_id 建立了索引,系統就建立了一張索引列到實際記錄的映射表。當用戶需要查找 student_id 為 12022 的數據的時候,系統先在 student_id 索引上找到該記錄,然后通過映射表直接找到數據行,并且返回該行數據。因為掃描索引的速度一般遠遠大于掃描實際數據行的速度,所以采用索引的方式可以大大提高數據庫的工作效率。

簡而言之,不使用索引,MySQL 就必須從第一條記錄開始讀完整個表,直到找出相關的行。表越大,查詢數據所花費的時間就越多。如果表中查詢的列有一個索引,MySQL 就能快速到達一個位置去搜索數據文件,而不必查看所有數據,這樣將會節省很大一部分時間。

MYSQL 索引 的分類

1、普通索引 和 唯一索引

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

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

如果是組合索引,則列值的組合必須 唯一

主鍵索引是一種特殊的唯一索引,不允許 有空值

2、單列索引 和 組合索引

單列索引:一個索引只包含單個列,一個表可以有多個單列索引

組合索引:在表的 多個字段 組合上 創建的 索引

只有在查詢條件中使用了這些字段的 左邊字段 時,索引才會被使用(最左前綴原則)

3、全文索引

全文索引 的類型為 fulltext

在定義索引的 列上 支持值的全文查找,允許在這些索引列中插入 重復值 和 空值

全文索引 可以在 char、varchar 和 text 類型的 列 上創建

4、空間索引

空間索引 是對 空間數據類型 的字段 建立的索引

MySQL 中的空間數據類型有 4 種,分別是 Geometry、Point、Linestring 和 Polygon

MySQL 使用 Spatial 關鍵字進行擴展,使得能夠用創建正規索引類似的語法創建空間索引

創建空間索引的列,不允許為空值,且只能在 MyISAM 的表中創建。

5、前綴索引

在 char、varchar 和 text 類型的 列 上創建索引時,可以指定索引 列的長度

MySQL 索引 的數據結構

?MySQL 索引 的數據結構可以分為 BTree 和 Hash 兩種,BTree 又可分為 BTree 和 B+Tree。

Hash:使用 Hash 表存儲數據,Key 存儲索引列,Value 存儲行記錄或行磁盤地址。

?Hash 只支持等值查詢(“=”,“IN”,“=”),不支持任何范圍查詢(原因在于 Hash 的每個鍵之間沒有任何的聯系),Hash 的查詢效率很高,時間復雜度為 O(1)。

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

性質:

BTree 的節點存儲多個元素(鍵值 – 數據 / 子節點 的地址)

BTree 節點的鍵值按 非降序 排列

BTree 所有葉子節點都位于同一層(具有相同的深度)

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

BTree 的不足:

不支持范圍查詢的快速查找(每次查詢都得從根節點重新進行遍歷)

節點都存儲數據會導致磁盤數據存儲比較分散,查詢效率有所降低

B+Tree:在 BTree 的基本上,對 BTree 進行了優化:只有葉子節點才會存儲 鍵值 – 數據,非葉子節點只存儲 鍵值 和 子節點 的地址;葉子節點之間使用雙向指針進行連接,形成一個雙向有序鏈表。

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

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

B+Tree 的優點:

保證了等值查詢和范圍查詢的快速查找

單一節點存儲更多的元素,減少了查詢的 IO 次數

到此,相信大家對“mysql 有沒有索引”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計2457字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 泰宁县| 兖州市| 桂东县| 云浮市| 衢州市| 台江县| 湾仔区| 鄯善县| 福清市| 双城市| 美姑县| 高阳县| 嵊泗县| 晋宁县| 门头沟区| 黔西县| 拜泉县| 金山区| 驻马店市| 定结县| 台南市| 平安县| 绥中县| 富锦市| 胶南市| 东山县| 莱芜市| 温州市| 马鞍山市| 民权县| 沂水县| 高淳县| 北川| 晋中市| 日土县| 金门县| 镇雄县| 滨州市| 呈贡县| 姜堰市| 团风县|