丁奇mysql實戰 丁奇 MySQL實戰讀書筆記5

2021-10-19 04:38:25 字數 1068 閱讀 3028

在下面這個表 t 中,如果我執行 select * from t where k between 3 and 5,需要執行幾次樹的搜尋操作,會掃瞄多少行?

mysql> create table t (

id int primary key,

k int not null default 0,

s varchar(16) not null default '',

index k(k))

engine=innodb;

insert into t values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');

1.查k索引樹,獲得3對應的id,300

2.查主鍵索引樹,300

3.查k索引樹,獲得5對應的id,500

4.查主鍵索引樹,500

5.查k索引樹,獲得6,超過5退出

覆蓋索引

果執行的語句是 select id from t where k between 3 and 5,這時只需要查 id 的值,而 id 的值已經在 k 索引樹上了,因此可以直接提供查詢結果,不需要回表。也就是說,在這個查詢裡面,索引 k 已經「覆蓋了」我們的查詢需求,我們稱為覆蓋索引。

典型應用場景:

根據使用者身份證號,查詢姓名。可以直接建立身份證號、姓名的聯合索引。

最左字首原則

image.png

因為可以支援最左字首,所以當已經有了 (a,b) 這個聯合索引後,一般就不需要單獨在 a 上建立索引了。因此,第一原則是,如果通過調整順序,可以少維護乙個索引,那麼這個順序往往就是需要優先考慮採用的。

案例:1.查詢身份證、位址

再建立乙個身份證、位址的聯合索引

2.查詢a,b 同時查詢a 或者b

建立a,b 和b的兩個索引

索引下推

mysql 5.6 引入的索引下推優化

[上傳中...(image.png-b8f890-1612234340574-0)]

image.png

索引中能判斷出來條件不滿足,就不用回表了

丁奇mysql實戰 丁奇 MySQL實戰讀書筆記1

這個專欄的內容是我工作以來看過講mysql最深入而且最細緻的,作者丁奇是前阿里資深技術專家,和褚霸 霸爺 一起研究資料庫7年之久,我覺得很有必要把這個專欄重新讀一下並做好筆記,以求共勉。特別注意由於丁奇在資料庫領域比較資深,所以很多知識他可能認為你至少應該是了解的,如果完全不了解某個知識點,建議先去...

丁奇 mysql 丁奇 MySQL實戰讀書筆記13

1 為啥刪除了表的一半數8據,表文檔案大小沒變化?因為delete 命令其實只是把記錄的位置,或者資料頁標記為了 可復用 但磁碟檔案的大小是不會變的。也可以認為是一種邏輯刪除,所以物理空間沒有實際釋放,只是標記為可復用,表檔案的大小當然是不變的啦!2 表的資料資訊存在 表資料資訊可能較小也可能巨大無...

MySql 丁奇 學習筆記 MVCC

問題0 有如下表結構,分析下面三個事務讀到的資料是甚麼?create table t engine innodb insert into t values 1,1 事務a 事務b事務c start transaction with consistent snapshot start transact...