MySQL索引優化

2022-09-20 11:03:16 字數 1853 閱讀 8054

索引:排好序的快速查詢的資料結構

儲存引擎的不同,索引的資料型別也是不同,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...