記錄下mysql索引以及回表

2022-08-05 18:39:13 字數 726 閱讀 6760

mysql資料庫的innodb引擎所有的表都預設建立在索引之上的,也就是聚集索引,而主鍵就是聚集索引,所以主鍵只能建乙個。普通索引也就是非聚集索引,可以多個。 索引的資料結構是b+樹也就是平衡樹。查詢資料的時候根據索引查詢資料所在位置然後取到資料。查詢普通索引的時候是先根據普通索引找到主鍵再根據主鍵定位到資料,也就是資料是和主鍵一起儲存的。

我們知道計算機磁碟io是非常高昂的操作,所以優化後的磁碟io是有預載入的,也就是讀到哪條資料把附近的資料也一塊讀了,就是page。而b+樹的結構,隨便找了個圖看看。從索引定位資料,最理想的是第一讀載入page時就把索引全拿到記憶體裡了,直接定位到資料這樣就非常快了。然後實際情況不可能如此,但是你也可以想到盡量載入多的索引資料也挺好的,這也是為什麼資料都放到葉子節點,與索引比資料太大了。這是從索引到拿到資料的乙個簡單點的描述。那普通索引是怎麼工作的吶?首先查詢方式是一樣的,只不過普通索引找到的葉子有索引欄位和聚集索引,在通過聚集索引找到葉子資料。多了乙個過程而已。

回表是什麼?通常資料量大的時候回表是災難性的,比如說人員表裡有學號、姓名、年齡等字段,學號是主鍵,姓名上也建了普通索引,你如果查詢查詢name欄位,通過name索引就拿到了,而如果在加個age吶?你要在根據主鍵定位資料拿到age欄位資料,這個過程就是回表。這時候就要考慮聯合索引了。索引使用原則什麼的就不說了,簡單寫寫記錄下遇到具體問題順著這個思路查查。

mysql索引 回表 記錄下mysql索引以及回表

mysql資料庫的innodb引擎所有的表都預設建立在索引之上的,也就是聚集索引,而主鍵就是聚集索引,所以主鍵只能建乙個。普通索引也就是非聚集索引,可以多個。索引的資料結構是b 樹也就是平衡樹。查詢資料的時候根據索引查詢資料所在位置然後取到資料。查詢普通索引的時候是先根據普通索引找到主鍵再根據主鍵定...

mysql建表 索引以及SQL效能優化

1前言2 設計部分 2.1設計表注意事項 2.1.1 定義字段型別 盡可能精確地定義字段型別,包括型別和長度 如不要以字元型別宣告純數字字段,業務上tinyint夠用的情況避免定義為int等。2.1.2 盡可能使用not null null需要更多的 更多的檢查和特殊的索引邏輯。所以大多數時候應該使...

Mysql之如何建立索引以及組合索引

資料庫中為何要建立索引?這個問題對於做做簡單實驗的學生來說似乎並不需要過於了解,但是,如果處理的資料達到百萬以及以上的時候,合適的索引就能夠體現出很強大的優勢 mysql預設使用b 樹索引 建立索引的三種方式 三種方式 1.create index index name on table name ...