資料庫索引

2022-05-29 17:27:10 字數 2103 閱讀 5798

#  ###資料庫索引

part 1 索引(index)概念:

是乙個樹狀的資料結構,即(b樹結構,分支節點》2)

相當於字典的目錄,功效是加快查詢速度;

常用樹: b樹(balance-tree) , 二叉樹,紅黑樹,hash樹

# 樹節點:

根節點(最頂級節點)

分支節點(父節點,子節點)

葉子節點(最後一層儲存資料的節點)

樹的高度(樹的層級,理想是三層)

[b+樹] : 在相鄰的葉子節點上,加入了雙向鍊錶(指標),當前葉子節點不但儲存當前值,還儲存了下乙個葉子節點的位址[小範圍資料,查詢速度很快]

[b*樹] : 在相鄰的分支節點上,加入了雙向鍊錶(指標),當前分支節點不但儲存當前值,還儲存了下乙個分支節點的位址[在大範圍裡,找資料速度加快]

b樹結構

# (4) innodb 和 myisam 的索引結構

(1) 聚集索引(聚簇索引) [innodb儲存引擎的特點,myisam沒有]

如果有主鍵,自動以主鍵作為聚集索引列(字段)

如果沒有主鍵,選擇唯一鍵

都沒有,自動生成隱藏聚集索引,該字段是6個位元組,型別為長整型;

分支節點是儲存下一層節點的最小值,用來劃分範圍,追求的矮胖的資料結構

在資料量變大的時候,盡量在樹層級高度不變的情況下,橫向發展,好處:可以減少io次數,提公升查詢效率

真實的資料,直接在葉子節點上儲存,所以速度快.

聚集索引

(2) 輔助索引(非聚簇索引,二級索引,普通索引)

對這一列的資料先排序,劃分區間,把索引值分布到葉子節點上

輔助索引儲存的是加了索引的字段值和對應對映的主鍵id(primary key=>pk),沒有儲存真實的資料

通過找出這個主鍵id,再去聚集索引樹狀結構中查詢真實資料;

輔助索引輔助聚集索引找資料的,輔助索引葉子節點重複值過多,會導致回表的次數增多,隨機產生的io減慢查詢效率

如果想要解決重複問題,使用聯合索引,更加精確找出對應唯一的那個id.

輔助索引

(3) 兩者區別:

myisam 和 innodb 使用的索引資料結構都是b+樹,但是在葉子節點上儲存的資料不同

innodb的檔案結構中只有.frm 和 .ibd , 直接把資料存在了葉子節點上

myisam的檔案結構中有.frm .myd .myi , 葉子節點上儲存的索引列,通過索引列對映對應的位址,在去通過這個位址找到實際的資料

innodb 乙個表只有乙個聚集索引,和多個輔助索引,排序速度更快

myisam 只能有多個輔助索引,沒有聚集索引

(4) 效能優化:

利用索引查詢時,速度很快,相反,增刪改速度會變慢,會改變樹狀結構;

追求:讓每乙個分支節點儲存的資料盡量小,減少樹狀結構縱向值高度上的增加

# ### part2 : 索引

# 1.常用索引種類:

普通索引(index)

-提高查詢的效率

唯一索引:

-主鍵索引 primary key : 在建立主鍵約束的同時,建立索引(不為空,唯一)

-唯一索引 unique : 在建立唯一約束的同時,建立索引(允許為空,唯一)

聯合索引:

-primary key() : 聯合主鍵索引

-unique() : 聯合唯一索引 

-index() : 聯合普通索引

# 不同的儲存引擎支援的索引種類

innodb : 支援事務,行級鎖, 支援 b-tree ,fulltext ,不支援hash型別索引結構

myisam : 支援表級鎖,不支援事務 支援 b-tree , fulltext ,不支援hash型別索引結構

memory : 不支援事務,支援表級鎖 支援 b-tree ,hash型別 ,不支援fulltext索引結構

資料庫 資料庫索引

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

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

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

資料庫索引

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