索引
-
关键字 : index
-
展示一个表上有那些索引 Show index from 表名;
show index from t_student;
索引的类型
- MySQL提供多种索引类型供选择: 当有一个非主键属性经常当做条件查询时,可以在这个属性上放一个索引。
-
普通索引
-
这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
-
create index 索引名 on 表名(字段名);
① 给学生表的姓名设置一个索引
create index aa on t_student(sname);
-
-
-
唯一性索引
-
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次(相当于主键),即必须唯一。唯一性索引可以用以下几种方式创建:
-
create unique index 索引名 on 表名(列名);
① 给学生表里面的英文名创建唯一索引
create unique bb on t_student(sename);
唯一索引比普通索引在查询效率上高一些;使用索引添加数据,比使用索引查询要慢一些
-
-
-
主键索引
- 主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。
-
全文索引
- 只有MyISAM存储引擎支持全文索引。但是该引擎与外键冲突,不能同时使用。
-
多列索引
-
Create table tab(
id int,
name varchar(20),
sex char(4),
index [indexName](name,sex)
);
-
使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。
-
删除索引
- Drop index 索引名 on 表名;
explain
- explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
- id
- SELECT识别符。这是SELECT查询序列号。这个不重要,查询序号即为sql语句执行的顺序。
- select_type
- select类型,它有以下几种值
- simple 它表示简单的select,没有union和子查询
- primary 最外面的select,在有子查询的语句中,最外面的select查询就是primary。
- select类型,它有以下几种值
- table
- 输出的行所用的表,这个参数显而易见,容易理解
- type
- 连接类型。有多个参数,先从最佳类型到最差类型介绍 (重要)
- const
- 表最多有一个匹配行,const用于比较primary key 或者unique索引。因为只匹配一行数据,所以很快记住一定是用到primary key 或者unique,并且只检索出两条数据的情况下才会是const,看下面这条语句
- ALL
- 对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const的表,这通常不好,并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出。
- possible_keys
- 提示使用哪个索引会在该表中找到行,不太重要
- keys
- MYSQL使用的索引,简单且重要
- key_Len
- MYSQL使用的索引长度
- ref
- ref列显示使用哪个列或常数与key一起从表中选择行。
- rows
- 显示MYSQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引
- Extra
- 该列包含MySQL解决查询的详细信息。