索引:排好序的快速查詢的資料結構
儲存引擎的不同,索引的資料型別也是不同,innodb的索引b+樹結構建表語句資料都在樹的葉子節點上
create table t(
id int primary key,
k int not null,
name varchar(16),
index (k));
設定值:
(id,k)值分別為 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6)
id索引是主鍵索引,葉子節點就是一行資料k索引是二級索引,葉子節點是主鍵值
select * from t where id = 200; //查詢主鍵索引就可以查詢到
select * from t where k = 2; //查詢k索引,拿到主鍵值,再到主鍵表中查詢資料,叫回表
b+樹需要維護索引的有序性,新插入資料的時候,需要對索引做維護
索引樹的節點是一頁,一頁是16k
頁**如果新插入的資料是在中間的值,比如插入id=400的,如果所在頁已經滿了,就需要申請乙個新的資料頁,挪動部分資料到新的頁上,叫頁**
頁**影響效能和頁的使用率頁合併
相鄰的兩個頁資料有刪除,利用率很低的時候,將資料頁做合併
使用自增主鍵可以防止頁**
使用邏輯刪除可以防止頁合併
覆蓋索引:盡可能減少回表查詢
select * from t where k = 3; //會回表查詢
select id from t where k = 3; //id在k索引上已經有了,就不用回表查詢了,這是覆蓋索引
建立聯合索引k和name
select id,name from t where k = 3; //也不用回表,聯合索引上已經有需要的資料了
建立了多個字端的聯合索引,比如name和age
select * from t where name like "穆%" and age = 10;
name索引是可以用上的,但是age欄位用不到,範圍之後失效
有了聯合索引,單獨的name索引就可以不用建立了,少維護乙個索引,節省空間
在最左匹配的時候
建立聯合索引name 和age
select * from t where name like "張%" and age = 10;
5.6版本之前,查詢到「張」開頭的資料,然後回表查詢資料行,然後比對字段值
5.6版本引入索引下推優化,對索引中包含的字段進行比較,直接過濾不滿足條件的記錄,減少回表次數
只需要回表2次就可以
mysql 優化 聚集索引 mysql 索引優化
一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...
mysql索引優化原則 MySQL 索引優化原則
索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...
mysql索引優化原則 MySQL索引優化
mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...