首页 > 代码库 > MySQL查询性能调优化
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="9999alex@163.com";
组合索引 和 索引合并的区别:
组合索引:多列制造成一个索引
索引合并:只是使用索引的时候,把多个个单列的索引一起使用;
组合索引效率 > 索引合并
组合索引
----(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=‘1992alex@163.com‘;
select * from userinfo3 where name=‘id=1993‘;
select * from userinfo3 where email=‘1992alex@163.com‘;
应用场景:
两列经常联合使用使用联合索引
索引合并:单列数据 使用索引合并
MySQL查询性能调优化