我們先建立兩張表,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介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...