mysql数据库优化之索引优化

一、如何选择合适的列建立索引

1、一般会选择在where从句中,group by从句中,order by从句中  join on 从句中,建立索引,在特殊情况下select 从句中,所出的列,进行索引,当一个索引包含了查询中的所有列,那么称之为这样的索引为覆盖索引,当我们的查询执行的频率非常高,并且索引中查询中所包含的列比较少的情况下,我们就会通过覆盖索引的方式,对这个sql进行优化,使系统所需要的数据,完全通过索引就可以获取,而不用查询表的数据了。

2、索引的字段呢,也是越小越好的,因为数据库中存储数据是以页数为单位的,如果在一页中我们存储的数据越多,那么一次io操作所获取的数据量也就会越大,这样来说对我们的io效率会更高一些,所以的字段是越小越好。

3、我们在建立联合索引的时候呢,我们要考虑把哪一列的放在联合索引的前面是比较好的,因为联合索引会包含多个列,哪一列索引放到前面会对我们的查询优化率更好呢,首先我们要看哪一列离散程度更高,往往离散度越大的列选择性越高,因此放到联合索引的前面的效果是越好,通过一个例子来看一下如何来判断这个列的离散度,

二、索引优化sql的方法

删除重复及冗余索引,

重复索引是指相同的列以相同的顺序建立的同类型的索引,如下表primarykey 和unique(id)列上的索引就是重复索引

create table test (id int not null primary key, name varchar(10) not null,titile varchar(50) not nll,unique(id))engine = innodb;

冗余索引是指多个索引的前缀列相同,或是在联合索引中包含了主键的索引,下面这个例子中key(name,id)就是一个冗余索引,id是主键,联合索引key(name,id)包含了id主键,所以是冗余索引

create table test(id int not null primary key,name varchar(10) not null, title varchar(50) not null,key(name,id))engine=innodb;

如何找到重复索引 ,提供一个工具检查重复及冗余索引

使用pt-duplicate-key-checker工具检查重复及冗余索引 

pt-duplicate-key-checker -uroot -p‘123456’ -h 127.0.0.1

三、索引维护的方法

看哪些索引是不使用的,在mysql中通过慢查日志配合pt-index-usage 工具来进行索引使用情况的分析。

pt-index-usage -uroot -p'123456' mysql-slow.log




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值