還傻傻分不清MySQL回表查詢與索引覆蓋?
最近的工作中,遇到一個查詢裡用到主鍵索引與二級索引並存的問題情況,那對於這種情況,索引是如何高效執行的,是否會產生回表查詢呢?
1、兩類索引
1.1 聚集索引(聚簇索引)
如果表定義了PK(Primary Key,主鍵),那麼PK就是聚集索引。 如果表沒有定義PK,則第一個NOT NULL UNIQUE的列就是聚集索引。 否則InnoDB會另外建立一個隱藏的ROWID作為聚集索引。
1.2 非聚集索引(普通索引、非聚簇索引、二級索引)
2、應用示例
一例勝千言,show me you code!
2.1 建表操作
mysql> create table user( -> id int(10) auto_increment, -> name varchar(30), -> sex tinyint(4), -> type varchar(8), -> primary key (id), -> index idx_name (name) -> )engine=innodb charset=utf8mb4;
id 欄位是聚簇索引,name 欄位是普通索引(二級索引)
2.2 填充資料
mysql> select * from user;+----+--------+------+------+| id | name | sex | type |+----+--------+------+------+| 1 | sj | m | A || 3 | zs | m | A || 5 | ls | m | A || 9 | ww | f | B |+----+-----+-----+-----+
2.3 索引結構
聚簇索引(ClusteredIndex)
id 是主鍵,所以是聚簇索引,其葉子節點儲存的是對應行記錄的資料
普通索引(secondaryIndex)
name 是普通索引(二級索引),非聚簇索引,其葉子節點儲存的是聚簇索引的的值
2.4 查詢過程
普通索引查詢過程
如果查詢條件為主鍵(聚簇索引),則只需掃描一次B+樹即可透過聚簇索引定位到要查詢的行記錄資料。
select * from user where name = 'lisi';
普通索引因為無法直接定位行記錄,其查詢過程在通常情況下是需要掃描兩遍索引樹的。
3、索引覆蓋
3.1 如何實現覆蓋索引
explain select id, name from user where name = 'lisi';
explain分析:因為name是普通索引,使用到了name索引,透過一次掃描B+樹即可查詢到相應的結果,這樣就實現了覆蓋索引
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2935962/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 覆蓋索引、回表查詢MySql索引
- MySQL 的覆蓋索引與回表MySql索引
- 你的 SQL 還在回表查詢嗎?快給它安排覆蓋索引SQL索引
- Mysql索引覆蓋MySql索引
- mysql覆蓋索引之看山還是山MySql索引
- MySQL 索引覆蓋(Covering Index)MySql索引Index
- MySQL 聚簇索引 和覆蓋索引MySql索引
- 資料庫系列:覆蓋索引和規避回表資料庫索引
- 一篇文章講清楚MySQL的聚簇/聯合/覆蓋索引、回表、索引下推MySql索引
- 從InnoDB 索引執行簡述 聚集索引和非聚集索引、覆蓋索引、回表、索引下推索引
- golang 佔位符還傻傻分不清?Golang
- MySQL索引與查詢優化MySql索引優化
- 【MySQL】三、效能優化之 覆蓋索引MySql優化索引
- MySQL優化之覆蓋索引的使用MySql優化索引
- mysql覆蓋索引高效能的探究MySql索引
- MySQL-覆蓋索引總結筆記MySql索引筆記
- MySQL SQL最佳化 - 覆蓋索引(covering index)MySql索引Index
- CSS中+ , > , ~ 傻傻分不清CSS
- 什麼是覆蓋索引?索引
- 2021年了,`IEnumerator`、`IEnumerable`還傻傻分不清楚?
- Mysql建表、索引、函式、查詢使用中的坑!!!MySql索引函式
- Post,Get介面傻傻分不清?
- 技術分享 | MySQL 覆蓋索引最佳化案例一則MySql索引
- MongoDB慢查詢與索引MongoDB索引
- OKR與影響地圖,別再傻傻分不清OKR地圖
- MySQL 單表查詢MySql
- MySQL單表查詢MySql
- mysql鎖表查詢MySql
- Java SPI 和 API,傻傻分不清?JavaAPI
- 雲渲染技術的兩種場景還在傻傻分不清?
- 理解索引(中):MySQL查詢過程和高階查詢索引MySql
- MySQL-10.索引最佳化與查詢最佳化MySql索引
- MySQL 學習之索引篇和查詢MySql索引
- MySQL 索引及查詢優化總結MySql索引優化
- Python排序傻傻分不清?一文看透sorted與sort用法Python排序
- DM7閃回與閃回查詢
- MySQL索引原理及慢查詢最佳化MySql索引
- mysql三表關聯查詢MySql