Mysql 简单的索引优化

一、索引的原理

类比于英文字典,比如你要找hello这个单词,可以先定位到h字母,然后再定位到e字母,再找剩下的,这样查找起来就很快了,而且略过了很多无关的其它字母,加快了查询速度。
参考:
Mysql学习-索引总结(B-tree和hash、主键索引、唯一索引、普通索引、全文索引和组合索引)
MySQL innoDB索引底层原理详解
重点关注B+Tree索引
B+Tree所有索引数据都在叶子结点上,并且增加了顺序访问指针,每个叶子节点都有指向相邻叶子节点的指针。
这样做是为了提高区间查询效率,例如查询key为从18到49的所有数据记录,当找到18后,只需顺着节点和指针顺序遍历就可以一次性访问到所有数据节点,极大提到了区间查询效率。


二、如何建索引

ALTER TABLE emp_performance ADD PRIMARY KEY(id);                添加主键索引
ALTER TABLE emp_performance ADD UNIQUE (emp_id);                添加唯一索引
ALTER TABLE emp_performance ADD INDEX emp_name (name);          添加普通索引   
**唯一索引和主键索引与普通索引的区别是唯一,不重复。列值唯一,但是唯一索引可以有空值。主键索引不会有空值.**
ALTER TABLE emp_performance ADD FULLTEXT (id);                  添加全文索引
ALTER TABLE emp_performance ADD INDEX emp_id_stuid (id,stu_id); 添加多列索引 

DROP INDEX emp_id_stuid ON emp_performance;                     删除索引
ALTER TABLE emp_performance DROP INDEX id;                      删除索引
show index from emp_performance;                                查看索引

Mysql各种索引区别:
普通索引:最基本的索引,没有任何限制
唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它 是一种特殊的唯一索引,不允许有空值。
全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。创建复合索引时应该将最常用(频率)作限制条件的列放在最左边,依次递减。


三、建索引的几个原则

对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。

1、最前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>,<,like)就停止匹配,比如a=1 and b=2 and c>3 and d=4。如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以随意调整。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
2、=和in可以乱序,比如a=1 and b=2 and c=3建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优惠成索引可以识别的形式。
3、尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能区分度就是0(再多行的数据这个字段也就那几个值)。
4、索引列不能参与计算,比如from_unixtime(create_time)=’2018-01-31’就不能使用到索引
5、尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
6、一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
7、不使用NOT IN,NOT IN不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替


这里写图片描述

猜你喜欢

转载自blog.csdn.net/axela30w/article/details/79217522