1. 程式人生 > >MySQL查詢性能調優化

MySQL查詢性能調優化

聯合 src 字典 覆蓋 hang 範圍 rom 主鍵索引 sdf

一、索引的概念

索引:類似於字典的目錄,設置索引可以 加速數據查找,對數據進行約束;

二、索引類型的類型:

主鍵索引:保證數據唯一性,不能重復+不能為空

普通索引:加速數據查找

唯一索引:加速查找+不能從復

組合索引(多列):

三、索引的工作原理

1、索引原理:

如果要查找的數據,沒有設置索引,會從前到後地毯式搜索數據,如果設置了索引,會單獨創建一張額外表,按某種格式保存該列數據位置,方便查找;


2、索引表的數據的格式

2.1、hash格式:會把列中數據逐一hash成hash值(數字)對應數據的存儲地址;

索引表:
數據hash值(數字) 存儲位置(數字)

888 666

988 444

2.2、特點:索引表中的數據,和數據庫表中數據順序不一致了;(hash索引,適合單條數據查找,不適合範圍查
找)


Btree格式:二叉樹,左側放比自己小的數字,右側放比自己大的數據

技術分享


特點:範圍查找速度快


3、創建索引:


普通索引:

創建索引名 on...表的..列
CREATE INDEX zhanggen on day61.`user`(email);

唯一索引:

create unique index 索引名稱 on 表名(列名)
drop unique index 索引名稱 on 表名

組合索引(最左前綴匹配):

create unique index 索引名稱 on 表名(列名,列名)
drop unique index 索引名稱 on 表名
create index ix_name_email on userinfo3(name,email,)

名稱:覆蓋索引、合並索引

覆蓋索引:直接在索引文件裏查找,無需查找數據庫文件使用索引方式;


SELECT id FROM day61.`user` WHERE id=9999;

合並索引:把多個單列索引,聯合使用來查找數據的方式;

SELECT id FROM day61.`user` WHERE id=9999 AND email="[email protected]

/* */";


組合索引 和 索引合並的區別:

組合索引:多列制造成一個索引

索引合並:只是使用索引的時候,把多個個單列的索引一起使用;


組合索引效率 > 索引合並

組合索引
----(name,email)
select * from userinfo3 where name=‘alex‘ and email=‘asdf‘;
select * from userinfo3 where name=‘alex‘;
索引合並
----name
----email
SELECT * FROM day61.`user` WHERE id=1993 and [email protected];
select * from userinfo3 where name=‘id=1993‘;
select * from userinfo3 where [email protected];


應用場景:

兩列經常聯合使用使用聯合索引
索引合並:單列數據 使用索引合並

MySQL查詢性能調優化