在下面這個表 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...