MySql索引
在公司入职后第一个工作安排就是看数据库,看表结构,看SQL语句。索引在其中是一个很重要的角色。所以将索引进行一个系统的学习
索引是什么
官方介绍:帮助MySQL高效获取数据的数据结构。其目的就是快速查询和检索数据。如果把数据库看成一本书的话,索引就是这本书的目录。
索引是个文件,它本身也很大,就像数据一样不可能完全存储在内存中。所以索引通常存储在文件中(可能存储在单独的索引文件中,也可能存储在数据文件中)。
索引有很多种(具体后文介绍)。默认都是使用B+树的数据结构
索引的优缺点
优点
- 使用索引可以加快数据的检索速度,提高数据检索效率,降低数据库IO的成本
- 索引会对数据进行排序降低了数据排序的成本,就按照索引顺序排序相对于order by 语句而言,效率提升很多
缺点
- 索引会占据磁盘空间
- 索引的创建和维护需要大量时间。如果对表中结构进行修改的时候,那么索引也需要做相对的修改。索引虽然会提高查询效率,但是会降低更新表的效率。比如每次对表进行增删改操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。
索引类型
主键索引+二级索引(起辅助的作用)(主键索引后的五个)
主键索引
索引列中的值必须是唯一的有,不允许有空值
普通索引(Index)
最基本的索引类型,没限制,普通索引的唯一作用就是为了快速查询数据,,允许在定义索引的列中插入重复值和空值
唯一索引(Unique Key)
唯一索引也是一种约束。唯一索引的属性列不能出现重复的数据,但是允许数据为 NULL,一张表允许创建多个唯一索引。 建立唯一索引的目的大部分时候都是为了该属性列的数据的唯一性,而不是为了查询效率。
全文索引(Full Text)
全文索引的目的是为了检索大文本数据中的关键字信息。只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。当字段长度比较大时,如果创建普通索引,在用like进行模糊查询时候效率低下。Mysql5.6 之前只有 MYISAM 引擎支持全文索引,5.6 之后 InnoDB 也支持了全文索引。