MYSQL - 索引

106 阅读2分钟

MYSQL - 索引

索引用于快速找出在某一列中有某一特定值的行。不使用索引,MYSQL必须从第1条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多。如果表中查询的列有一个索引,MYSQL能快速到达某个位置去搜索文件,而不必要查看所有数据。

索引

  • 什么是索引
  • 创建索引的方法和技巧
  • 如何删除索引

什么是索引?

索引是对数据库表中一列或者多列的值进行排序的一种结构,使用索引可以提高数据库中特定数据的查询速度。

索引是一个单独的、存储在磁盘上的数据库结构包含着对数据表里所有记录的引用指针

索引是在存储引擎中实现的,每种存储引擎的索引不一定完全相同,并且每种存储引擎也不一定支持所有的索引类型。

所有存储引擎支持每个表至少16个索引,总索引长度至少为256个字节。

MYSQL中索引的存储类型有两种:BTREEHASH
MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。

索引的优缺点

优点

  • 加快查询速度
  • 加快表与表之间的连接
  • 减少分组和排序的时间

缺点

  • 创建索引和维护索引要耗费时间,随着数据量增加,耗费的时间也增加
  • 索引需要占磁盘空间,如果有大量索引,索引文件可能比数据文件更快达到最大文件尺寸
  • 对数据增删改时,索引也要动态维护

索引的分类

  • 普通索引:允许在定义索引的列中插入重复值和空值
  • 唯一索引:要求索引列的值必须唯一,允许有空值
  • 组合索引:列的组合值必须唯一
  • 主键索引:列值唯一非空
  • 全文索引:MyISAM存储引擎支持,可建于CHAR、VARCHAR、TEXT列上
  • 空间索引:对空间数据类型建立的索引

索引的设计原则

  • 避免对经常更新的表建立过多索引,对经常用于查询的字段建立索引;
  • 建于数据量比较多的表;
  • 在不同值较多的列上建立索引;
  • 唯一索引能够确保定义的列的数据完整性,提高查询速度;
  • 频繁排序、分组的的列上建立索引;