码迷,mamicode.com
首页 > 数据库 > 详细

MySQL查询性能调优化

时间:2017-06-12 17:45:50      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:前缀   数据   使用   没有   index   btree   hang   分享   原理   

一、索引的概念

索引:类似于字典的目录,设置索引可以 加速数据查找,对数据进行约束;

 

二、索引类型的类型:

主键索引:保证数据唯一性,不能重复+不能为空

普通索引:加速数据查找

唯一索引:加速查找+不能从复

组合索引(多列):

 

 

三、索引的工作原理

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查询性能调优化

标签:前缀   数据   使用   没有   index   btree   hang   分享   原理   

原文地址:http://www.cnblogs.com/sss4/p/6994071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!