七、索引

MySQL官方对索引的定义为:索引(Index)是帮助 MySQL 高效 获取数据的数据结构。

7-1、索引的分类

  • 主键索引 (primary key)
  • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引(unique key)
  • 唯一索引的 "唯一" 是指为列唯一,而唯一索引可重复
  • 常规索引 (key / index)
  • 默认的索引,关键字 key / index 设置
  • 全文索引 (FullText)
  • 在很大数据量才会使用,快速定位数据

基础语法

-- 索引的添加
--	1、在创建表的时候用关键字声明
--  2、创建后,用 ALTER/CREATE 进行添加

-- 显示 表A 所有的索引信息
show index from 表A

-- 增加一个全文索引: (索引名) 列名
alter table 表 add fulltext index `aaa` (`aaa`)

-- explain 分析sql的执行状况, 在语句的最前方加上即可

7-2、索引的测试

-- 创建索引前:(在100W条数据中查询某行记录)
SELECT * FROM app_user WHERE `name` = '用户99999'  -- 执行耗时   : 0.566 sec
SELECT * FROM app_user WHERE `name` = '用户99999'  -- 执行耗时   : 0.564 sec
SELECT * FROM app_user WHERE `id` = 99999  -- 执行耗时   : 0 sec 主键索引

-- 创建索引后:(在100W条数据中查询某行记录)
-- 索引命名规范: id_表名_字段名
CREATE INDEX id_app_user_name ON app_user (`name`)  -- 执行耗时   : 11.511 sec

EXPLAIN SELECT * FROM app_user WHERE `name` = '用户999989'  -- 执行耗时   : 0 sec

创建索引前:(在100W条数据中查询某行记录)执行耗时 : 0.563 sec

mysql 主键索引 MySQL主键索引关键字_MySQL

EXPLAIN 关键字显示 sql 执行情况:

mysql 主键索引 MySQL主键索引关键字_主键_02


======================================================================================================================================================================

创建索引后:(在100W条数据中查询某行记录)几乎不用时间

mysql 主键索引 MySQL主键索引关键字_MySQL_03

EXPLAIN 关键字显示 sql 执行情况:

mysql 主键索引 MySQL主键索引关键字_MySQL_04

总结:索引在数据量小的时候,区别不大;但在大数据的时候,查询效率提升明显!

7-3、索引的使用

  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的表不需要加索引
  • 应该加在常用来 查询 的字段上