[关闭]
@Chiang 2019-09-18T23:00:38.000000Z 字数 1245 阅读 558

索引

MySQL


索引分类

1.普通索引和唯一索引
2.单列索引和组合索引
3.全文索引
4.空间索引

创建索引

  1. # 创建表的时候创建索引
  2. create table table_name [col_name data_type]
  3. [unique | fulltext | spatial] [index | key] [index_name] (col_name [length]) [asc | desc]
  4. # 在已存在的表上创建索引
  5. alter table table_name add [unique | fulltext | spatial] [index | key] [index_name] (col_name[length],...) [asc | desc]
  6. # 使用create index 创建索引 MySQL中create index 被映射到一个alter table语句上
  7. create [unique | fulltext | spatial] index index_name on table_name (col_name[length],...) [asc | desc]

查看索引

  1. show index from book \G;

参数意义:

  • table 创建索引的表.
  • non_unique 表示索引非唯一, 1代表是非唯一索引, 0代表唯一索引.
  • key_name 表示索引的名称.
  • seq_in_index 表示该字段在索引中的位置,单列索引该值为1,组合索引为每个字段在索引定义中的顺序.
  • column_name 表示定义索引的列字段.
  • sub_part 表示索引的长度
  • null 表示该字段是否能为空值
  • index_type 表示索引类型.

删除索引

  1. # alter table
  2. alter table table_name drop index index_name;
  3. # drop index
  4. drop index index_name on table_name;

explan 查看索引是否正在使用

  1. explain select * from book where id=1 and name='joe' \G;

explan 语句输出结果的各个行解释:

  • select_type 指定所使用的select查询类型,这里值为simple,表示简单的select,不使用union或子查询.其他可能的取值有:primary、union、subquery等.
  • table 指定数据库读取的数据表的名字,他们按被读取的先后顺序排列.
  • type 指定了本数据表与其他数据表之间的关联关系,可能的取值有system、const、eq_ref、ref、range、index和all.
  • possible_keys 给出了MySQL在搜索数据记录时可选用的各个索引.
  • key MySQL实际选用的索引.
  • key_len 索引按字节计算的长度, key_len数值越小,表示越快.
  • ref 表示哪一列被使用了,常数表示这一列等于某个常数.
  • rows 大致找到所需记录需要读取的行数.
  • extra 一些重要的额外信息

参考资料:
MySQL5.7从入门到精通
mysql中explain详解
索引(三)MySQL SHOW INDEX


对比:
数据表的基本操作

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注