MYSQL - 索引
索引用于快速找出在某一列中有某一特定值的行。不使用索引,MYSQL必须从第1条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多。如果表中查询的列有一个索引,MYSQL能快速到达某个位置去搜索文件,而不必要查看所有数据。
索引
- 什么是索引
- 创建索引的方法和技巧
- 如何删除索引
什么是索引?
索引是对数据库表中一列或者多列的值进行排序的一种结构,使用索引可以提高数据库中特定数据的查询速度。
索引是一个单独的、存储在磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。
索引是在存储引擎中实现的,每种存储引擎的索引不一定完全相同,并且每种存储引擎也不一定支持所有的索引类型。
所有存储引擎支持每个表至少16个索引,总索引长度至少为256个字节。
MYSQL中索引的存储类型有两种:BTREE 和 HASH;
MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
索引的优缺点
优点
- 加快查询速度
- 加快表与表之间的连接
- 减少分组和排序的时间
缺点
- 创建索引和维护索引要耗费时间,随着数据量增加,耗费的时间也增加
- 索引需要占磁盘空间,如果有大量索引,索引文件可能比数据文件更快达到最大文件尺寸
- 对数据增删改时,索引也要动态维护
索引的分类
- 普通索引:允许在定义索引的列中插入重复值和空值
- 唯一索引:要求索引列的值必须唯一,允许有空值
- 组合索引:列的组合值必须唯一
- 主键索引:列值唯一非空
- 全文索引:MyISAM存储引擎支持,可建于CHAR、VARCHAR、TEXT列上
- 空间索引:对空间数据类型建立的索引
索引的设计原则
- 避免对经常更新的表建立过多索引,对经常用于查询的字段建立索引;
- 建于数据量比较多的表;
- 在不同值较多的列上建立索引;
- 唯一索引能够确保定义的列的数据完整性,提高查询速度;
- 频繁排序、分组的的列上建立索引;