資料庫索引

2021-08-31 07:25:14 字數 1092 閱讀 7408

1、索引可以加快資料庫的檢索速度

2、表經常進行insert/update/delete操作就不要建立索引了,換言之:索引會降低插入、刪除、修改等維護任務的速度;

3、索引需要佔物理和資料空間

4、盡量選擇區分度高的列作為索引,區分度的公式是 count(distinct col) / count(*)。表示欄位不重複的比率,比率越大我們掃瞄的記錄數就越少。

5、存在最左匹配原則

mysql支援hash索引和b+樹索引兩種。

1、b+樹索引:主流的還是使用b+樹索引比較多。

2、雜湊索引:

雜湊索引就是採用一定的雜湊演算法,把鍵值換算成新的雜湊值,檢索時不需要類似b+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演算法即可立刻定位到相應的位置,速度非常快。本質上就是把鍵值換算成新的雜湊值,根據這個雜湊值來定位。

雜湊索引有好幾個侷限(根據他本質的原理可得):

聚集索引就是以主鍵建立的索引;非聚集索引就是以非主鍵建立的索引;

區別:1、聚集索引在葉子節點儲存的是表中的資料;

2、非聚集索引在葉子節點儲存的是主鍵和索引列;

3、使用非聚集索引查詢出資料時,拿到葉子上的主鍵再去查到想要查詢的資料。(拿到主鍵再查詢這個過程叫做回表)

因此非聚集索引也叫做二級索引。

最左匹配原則:

1)索引可以簡單如乙個列(a),也可以複雜如多個列(a, b, c, d),即聯合索引。

2)如果是聯合索引,那麼key也由多個列組成,同時,索引只能用於查詢key是否存在(相等),遇到範圍查詢(>、

3)因此,列的排列順序決定了可命中索引的列數。

例子:1)如有索引(a, b, c, d),查詢條件a = 1 and b = 2 and c > 3 and d = 4,則會在每個節點依次命中a、b、c,無法命中d。(很簡單:索引命中只能是相等的情況,不能是範圍匹配)

另外、=、in自動優化順序

不需要考慮=、in等的順序,mysql會自動優化這些條件的順序,以匹配盡可能多的索引列。

例子:

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

資料庫索引

索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...