MySql索引基本
1.什么是索引
索引用于快速找出在某个列中有一特定值的行。如果不使用索引,需要遍历整张表,表越大查询耗时越大;
MySQL中的索引的存储类型有两种:BTREE、HASH。具体实现机制参照另一篇博客;
2.索引的优缺点分析和使用原则
优点:
- 任意字段可以设置索引
- 索引可以大大加快查询
缺点:
- 创建、维护索引需要额外耗时,并且耗时随数据量明显增加
- 索引需要占据空间,导致提前达到数据最大上线值
- 数据增、删、改需要维护索引,维护速度降低
使用原则:
1. 更新频繁的表应该避免过度索引,对查询频繁的字段应该创建索引;
2. 数据量小的表不需要索引;
3. 不同值少的列上(字段上)不要建立索引,例如学生表的"性别"字段上只有男,女两个不同值,无需设置索引;
3.索引分类
索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引;
MyISAM和InnoDB存储引擎:只支持BTREE索引
MEMORY/HEAP存储引擎:支持HASH和BTREE索引
索引分类 | 定义 | 说明 |
单列索引 |
普通索引:字段没限制,允许在定义索引列中插入重复值、空值; 唯一索引:索引列中的值必须是唯一的,但允许为空值; 主键索引:索引列值必须唯一,不允许为空 |
一个索引包含单列,但一张表可以有多个索引 |
组合索引 | 表中的多个字段组合上创建的索引 | 使用组合索引时遵循最左前缀集合 |
全文索引 | 在一堆数据中,通过某个关键字等,就能找到该字段所属的记录行 | MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引 |
空间索引 | 空间索引是对空间数据类型的字段建立的索引, | MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON |
参考:
https://www.cnblogs.com/whgk/p/6179612.html
https://blog.csdn.net/waeceo/article/details/78702584