概述
MySQL中索引有两大存储类型 BTREE和HASH
。
- MyISAM和InnoDB存储引擎只支持BTREE索引。
- MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
使用索引的优点
- 加快数据的查询速度。
- 唯一索引,可以保证数据库表中每一行数据的唯一性。
- 在实现数据的参考完整性方面,可以加速表和表之间的连接。
- 在使用分组和排序子句进行数据查询时,也可以显著减少查询中分组和排序的时间。
使用索引的缺点
- 占用磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸(合理运用,问题不大)。
- 损耗性能(添加、修改、删除) 索引需要动态地维护。
索引分类
普通索引:最基本的索引,没有任何限制,是我们大多数情况下使用到的索引。
唯一索引:与普通索引类型,不同的是唯一索引的列值必须唯一,但允许为空值。
全文索引:全文索引(FULLTEXT)仅可以适用于MyISAM引擎的数据表;作用于CHAR、VARCHAR、TEXT数据类型的列。
组合索引:将几个列作为一条索引进行检索,使用最左匹配原则。
建立索引的原则
- 合理设计和使用索引。
- 在关键字段的索引上,建与不建索引,查询速度相差近100倍。
- 差的索引和没有索引效果一样。
- 索引并非越多越好,因为维护索引需要成本。
- 每个表的索引应在5个以下,应合理利用部分索引和联合索引。
- 不在结果集中的结果单一的列上建索引。比如性别字段只有0和1两种结果集,在这个字段上建索引并不会有太多帮助。
- 建索引的字段结果集最好分布均匀,或者符合正态分布。