略
索引用于快速找出在某一个列中有一特定值的行.不使用索引,MySQL必须从第一条记录开始读完整个表,直到找到相关的行.表越大,查询数据所花费的时间就越多.如果有索引存在,MySQL就可以快速到达某个位置去搜索数据文件,而不必查看所有的数据.
索引简介
索引是对数据库表中一列或者多列的值进行排序的一种结构,使用索引可以提高数据库中特定数据的查询速度
索引的含义和特点
索引是一个单独、存储在磁盘上的数据库结构,它们包含着对数据表中所有记录的引用指针.使用索引用于快速找出某个或者多个列中特定的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高操作速度的最佳途径.
例如在一个有1000行的数据的表中,找id为500的数据,那么它需要从头开始一一遍历整个表,直到数据被找到为止,而在id上创建索引,MySQL不需要任何扫描,直接在索引中找500,就可以知道这一行的位置.
MySQL中索引的存储类型有两种: BTREE 和 HASH ,具体和表存储引擎相关,MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE引擎.
索引也会有一些缺点:
- 创建索引和维护都需要耗费时间,数据量的增加导致耗时增加
- 索引需要占用存储空间,如果有大量索引,索引文件可能比数据文件更快达到最大文件尺寸
- 当对表中的数据进行增加,修改和删除时,索引也要动态的维护,降低了数据维护的速度.
所以索引需要用对地方,合理的使用索引有利于数据库的查询.
索引的分类
MySQL的索引可以分为以下几类:
- 普通索引和唯一索引
- 单列索引和组合索引
- 全文索引
- 空间索引(仅仅在引擎为MyISAM的表中使用)
索引的设计原则
- 索引不要多用
- 经常更新的表少用
- 数据量少的表不用
- 数据列上不同值少的表不用,(例如男|女的列)
- 数据有唯一属性时,最好指定个唯一索引
- 在频繁进行排序或者分组的列上建立索引
创建索引
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 | CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 |
删除索引
同样可以使用ALTER和DROP两个方法
使用ALTER TABLE 删除索引
1 | ALTER TABLE 表名 DROP INDEX 索引名 |
使用DROP INDEX删除索引
1 | DROP INDEX 索引名 ON 表名 |
总结
索引内容比较少,主要是给某个列增加,删除索引,索引的工作由MySQL负责,鬼知道它底层怎么搞的.