索引(快速查询)
数据存储在数据表中,而索引是创建在数据库表对象上
由表中的一个字段或多个字段生成的键组成
是对数据库表中一系列或多列值进行排列的一种结构
作用
- 大大提高数据库的检索速度
- 改善数据库性能
MySQL索引按存储类型分类
- B-树索引(BTREE)
- InnoDB、MyISAM均支持
- 哈希索引(HASH)
常用索引
普通索引
- 基本索引类型
- 允许在定义索引的列中插入重复值和空值
唯一索引
- 索引列数据不重复
- 允许有空值
主键索引
- 主键列中的每个值是非空、唯一的
- 一个主键将会自动创建主键索引
复合索引
- 将多个列组合作为索引
全文索引
- 支持值的全文查找
- 允许重复值和空值
创建/删除索引
创建索引
CREATE [UNIQUE唯一索引|FULLTEXT全文索引|SPATIAL空间索引]INDEX index_name ON table_name(column_name [length]...);
CREATE INDEX index_memName on member(memName);
注:如果创建索引是未指定创建索引的类型,则创建的索引为普通索引,通过CREATE INDEX语句无法创建主键索引,主键索引的创建语句,主键自带索引
ALTER TABLE tablename ADD PRIMARY KEY(column)
ALTER TABLE member ADD PRIMARY KEY(id)
删除索引
DROP INDEX index_name ON table_name;
注:
- 删除表时,该表的所有索引同时会被删除
- 删除表中列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除
- 如果组成索引的所有列都被删除,则整个索引将会被删除
查看索引
查看已创建的索引信息
SHOW INDEX FROM table_name;
创建索引的指导原则
按照下列标准选择建立索引的列
- 频繁搜索的列
- 经常用作查询选择的列
- 经常排序、分组的列
- 经常用作连接的列(主键/外键)
不要使用下面的列创建索引
- 仅包含几个不同值的列
- 表中仅包含几行
使用索引时的注意事项
- 查询时减少使用 “*” 返回表的全部列,不要返回不需要的列
- 索引应该尽量小,在字节树小的列上建立索引
- WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
- 避免在ORDER BY子句中使用表达式
- 根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理