当前位置: 移动技术网 > IT编程>数据库>Mysql > mysql索引创建和使用优缺点讲解

mysql索引创建和使用优缺点讲解

2018年04月19日  | 移动技术网IT编程  | 我要评论

索引是一种特殊的文件, 它包含着对数据表里所有记录的引用. 如果把数据库看做一本书的话, 那么索引就相当于这本书的目录.

创建索引:

create index 索引名称 on 表名 (字段,字段....);

删除索引:

DROP INDEX 索引名称 ON 表名;

显示索引信息

SHOW INDEX FROM table_name;

索引的优点和缺点

优点: 大大加快了数据源的查询

缺点: 创建和维护索引需要先消耗时间,并且随着索引数量的增加,所耗费的时间也会增加..

索引的使用原则:

对经常有更新 的表, 要避免建过多的索引, 对经常用于查询的子弹应该创建索引

数据量小的最好不要使用索引, 由于数据较小, 可能查询全部数据所花费的时间比遍历索引的时间还要短, 索引就不回产生效果,

在同一值少的列不要建立索引,比如学生表的”性别”字段

注意: 索引是在存储引擎中实现的, 也就是说不同的存储引擎, 会使用不同的索引,

索引分类

Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引

单列索引: 一个索引包含单个列,但一个表中可以有多个单列索引,

单列索引可以分为: 普通索引, 唯一索引, 主键索引

普通索引:

mysql中基本索引类型, 没有什么限制, 允许在定义索引的列中插入重复值和空值,只是为了查询数据快一点

唯一索引:

索引列中的值必须是唯一的, 但是允许为空值

主键索引:

是一种特殊的唯一索引, 不允许有空值

组合索引:又称为联合索引

在表中的多个字段组合上创建的索引, 只有在查询条件中使用了这些字段的左边字段时, 索引才会被使用,

比如在mysql表中创建了一个联合索引, myindex(A,B,C)

create index myindex on 表名 (A,B,C);

当where 查询条件 包含A时, 才后悔调用myindex 索引,也就是说,查询条件为BC或者B或者C时,都不会经过myindex.

当查询条件为ABC, AB,AC的时候,都会调用myindex索引

全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时耗空间。

介绍下mysql提供的很有用的一个工具:执行计划

格式:explain + SQL语句;

如下图:

这里写图片描述

注释:

table: 显示这条sql是关于哪张表的

type: 显示这条sql的查询类型属于哪种,从最好的到最差

const < eq _reg < ref < range < index SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是const最好

possible_keys: 可能用到的索引

key:实际用到的索引

key_len:显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好 。

ref: 显示索引的哪一列被使用了,如果可能的话, 是一个常数

rows:估计需要扫描的行数

extra;显示以上信息之外的其他信息

Using index–查询使用了覆盖索引(Covering Index),即通过索引就能返回结果,无需访问表

Using where– MySQL 服务器从存储引擎收到行后再进行“后过滤”(Post-filter)。所谓“后过滤”,就是先读取整行数据,再检查此行是否符合 where 句的条件,符合就留下,不符合便丢弃

Using temporary-使用到临时表

Using filesort–若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,否则,在取得结果后,还需要按查询所需的顺序对结果进行排序,这时就会出现 Using filesort加索引的原则

1) 确定数据量:一般数据规模在10W以上需要考虑索引(并不绝对,当添加索引后,查询效率明显提升)

2) 较频繁的作为查询条件的字段应该创建索引

有时间查询,给日期列添加索引

有字符串列,尽量避免加索引,可以进行类型调整,或加前缀索引

列值范围小的列不用加索引,如枚举列,状态列

在业务上有唯一意义的列,要加唯一索引

在有联合索引的基础上,如果不满足最左原则的查询场景较多,给单列再加索引

索引不宜过多,一般不超过5个

更新非常频繁的字段不适合创建索引

不会出现在where之后的字段不适合创建索引嗯, 先写到这, 后续我了解的多了继续补充

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网