MySQL查詢性能調優化
一、索引的概念
索引:類似於字典的目錄,設置索引可以 加速數據查找,對數據進行約束;
二、索引類型的類型:
主鍵索引:保證數據唯一性,不能重復+不能為空
普通索引:加速數據查找
唯一索引:加速查找+不能從復
組合索引(多列):
三、索引的工作原理
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查詢性能調優化