数据库-索引

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

索引简介

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

索引的含义和特点

索引是一个单独、存储在磁盘上的数据库结构,它们包含着对数据表中所有记录的引用指针.使用索引用于快速找出某个或者多个列中特定的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高操作速度的最佳途径.

例如在一个有1000行的数据的表中,找id为500的数据,那么它需要从头开始一一遍历整个表,直到数据被找到为止,而在id上创建索引,MySQL不需要任何扫描,直接在索引中找500,就可以知道这一行的位置.

MySQL中索引的存储类型有两种: BTREE 和 HASH ,具体和表存储引擎相关,MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE引擎.

索引也会有一些缺点:

  1. 创建索引和维护都需要耗费时间,数据量的增加导致耗时增加
  2. 索引需要占用存储空间,如果有大量索引,索引文件可能比数据文件更快达到最大文件尺寸
  3. 当对表中的数据进行增加,修改和删除时,索引也要动态的维护,降低了数据维护的速度.

所以索引需要用对地方,合理的使用索引有利于数据库的查询.

索引的分类

MySQL的索引可以分为以下几类:

  1. 普通索引和唯一索引
  2. 单列索引和组合索引
  3. 全文索引
  4. 空间索引(仅仅在引擎为MyISAM的表中使用)

索引的设计原则

  1. 索引不要多用
  2. 经常更新的表少用
  3. 数据量少的表不用
  4. 数据列上不同值少的表不用,(例如男|女的列)
  5. 数据有唯一属性时,最好指定个唯一索引
  6. 在频繁进行排序或者分组的列上建立索引

创建索引

3种方法:建立表时候写字段后面;修改表的列的属性;或者使用CREATE INDEX来直接创建

创建表时创建

创建普通索引

写法: 字段描述完毕后在后面接上INDEX(列名)

创建唯一索引

写法: UNIQUE INDEX 索引名(列名)

创建单列索引

写法: 前面两个都是单列索引

创建组合索引

写法: INDEX 索引名(列名1,列名2,列名3…..)

创建全文索引

写法: FULLTEXT INDEX 索引名(列名)

创建空间索引

在已经存在的表上创建索引

可以使用ALTER TABLE语句或者CREATE INDEX语句

使用ALTER TABLE语句创建索引

语法如下:

1
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名] (列名,....) [ASC | DESC] 

使用CREATE INDEX创建索引

语法如下:

1
2
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名
ON 表名 (列名1,列名2...) [ASC | DESC]

删除索引

同样可以使用ALTER和DROP两个方法

使用ALTER TABLE 删除索引

1
ALTER TABLE 表名 DROP INDEX 索引名

使用DROP INDEX删除索引

1
DROP INDEX 索引名 ON 表名

总结

索引内容比较少,主要是给某个列增加,删除索引,索引的工作由MySQL负责,鬼知道它底层怎么搞的.