mysql儲存引擎

2021-10-08 16:41:36 字數 1815 閱讀 4195

我們先建立兩張表,m_innodb是innodb引擎,m_myisam是myisam引擎

通過執行sql,檢視資料儲存的位置

show variables like 'datadir';
然後去伺服器該路徑下檢視:

共同都有的是frm檔案,這個是儲存的是表的元資訊,包括一些字段資訊

.myi檔案是myisam引擎b+樹儲存的位置

.myd是myisam引擎是資料儲存的位置

在innodb中,資料就是索引,索引就是資料,資料是存放在葉子節點上的,innodb中只有乙個檔案.ibd

主鍵索引的鍵值順序就決定了物理存放的順序

資料的物理順序跟主鍵的邏輯順序保持一致就是聚集索引

所以在innodb中,只有主鍵索引才是聚集索引

聚集索引就是決定了資料物理存放的順序

如果乙個表中沒有設定主鍵,那麼先會去找唯一索引作為主鍵索引,如果沒有唯一索引,會把_rowid(隱藏字段)做為聚集索引

除了主鍵索引外,其他的索引都叫輔助索引,輔助索引也有自己的b+樹,輔助索引葉子節點儲存的是索引和主鍵值,通過主鍵值再去主鍵索引的二叉樹上去查詢,所以用輔助索引相比直接使用主鍵索引要多掃瞄一棵b+樹

不要在雜湊度低的字段上建立索引(重複的資料太多),因為有重複的資料查詢就不會走索引

如果查詢where條件的順序和聯合索引的順序不一樣,mysql優化器會自動優化順序

圖中的4條sql只有1,2,4用到了索引,2用到索引是因為mysql會自動優化順序

這種做法是否可取?

不可取,相當於建立了兩個索引,構建了兩個b+樹

輔助索引因為先要在輔助索引自己構建的b+樹中找到主鍵值,然後通過主鍵值在主鍵索引的b+樹中查詢到對應的資料,這個過程就叫做回表

select查詢的字段是已被加了索引的字段,就叫覆蓋索引,覆蓋索引是一種行為,並不是一種索引型別

1:只根據name查用到了索引,但是*還查詢了非復合索引字段,所以需要回表查詢且沒有覆蓋索引

2:name和phone都用到了復合索引,且在輔助索引的b+樹上能直接獲取到資料,無需回表查詢有覆蓋索引

3:用到了復合索引,且查詢的字段也在這個b+樹上,所以無需回表查詢,且有覆蓋索引

4:查詢條件是phone,雖然不滿足聯合索引最左匹配原則,但是查詢欄位也為phone,mysql優化器權衡後會查詢會被覆蓋索引,且無需回表查詢

mysql儲存引擎 mysql儲存引擎簡介

精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...

mysql個儲存引擎 MySQL儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...

mysql儲存引擎模式 mysql儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...