MySQL 索引

索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找相关行。表越大,成本越高。如果表中有相关​​列的索引,MySQL可以快速确定要在数据文件中间寻找的位置,而无需查看所有数据。这比按顺序读取每一行要快得多。
类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。
本质上是告诉数据库的存储引擎如何快速找到我们所要的数据。所以 MySQL 的索引是在 MySQL 的存储引擎层实现的,而不是在其服务器层实现。

  • MySQL中常见索引有:
    1.普通索引
    2.唯一索引
    3.主键索引
    4.组合索引

一、普通索引

普通索引仅有一个功能:加速查询

创建表的同时创建索引,添加索引到列名 name, 索引名为 ix_name
create table t1(
    id int not null auto_increment primary key,
    name varchar(32),
    email varchar(64),
    extra text,
    index ix_name(name)
)

单独创建索引
create index index_name on 表名称(列名称)
Example
create index index_name on student(name);

查看索引
show index from 表名称;
/*Example*/
show index from student;

删除索引
DROP INDEX index_name on 表名称;
Example
DROP INDEX index_name on student;

二、唯一索引

唯一索引有两个功能:加速查询 和 唯一约束(可含null)

创建表和唯一索引
create table t2(
    id int not null auto_increment primary key,
    name varchar(32),
    email varchar(64),
    unique index ix_name (name)
);

创建唯一索引
create unique index 索引名 on 表名(列名);

删除唯一索引
ALTER TABLE 表名 DROP INDEX 索引名;

三、主键索引

主键有两个功能:加速查询 和 唯一约束(不可含null)
当一个列被创建为主键是,它就会被赋予主机索引的属性。

创建表和创建主键
create table t3(
    id int ,
    name varchar(32) ,
    email varchar(64) ,
    primary key(name)
);

四、联合索引

联合索引是将n个列联合成一个索引
其应用场景为:频繁的同时使用 n 个列来进行查询,如:where name = 'chen' and age = 18。

create table studens(
    id int not null auto_increment primary key,
    name varchar(32) not null,
    age int not null,
)

create index idx_name_age on students(name,age);

如上创建联合索引之后,查询时可以这么用:

name and age -- 使用索引 
where name=chen' and age=18;

name -- 使用索引 
where name='chen';

1. B树索引类型的联合索引使用限制

对于联合索引的使用上需要注意, where 自己的第一个条件的列名必须是组合索引列的最左边的那个。

下面是可以有效使用的方式
where name='chen;
where name='chen' and age>18;
where name = chen'  and (age >18 or age = 10);

但是,不能是下面的用法
where age = 18;
where name='chen'  or   age=19;


注意:对于同时搜索n个条件时,组合索引的性能好于多个单一索引合并。


匹配列前缀查询
name  like  'chen%'

匹配范围值查询
name > 'a' and name < 'c'

不可以使用 not in 和 <>
当有 3 列组成的索引时, 使用这个联合索引时,所有的字段不能跳过。
order_sn, order_name,order_date
where order_sn = '8998' and order_date = '20191010';
只能使用到 order_sn 这一个字段度索引,不能使用的 order_sn, order_date 的联合索引

五、SQl 执行计划

explain select name from t1 where name='chen'\G

EXPLAIN输出列

JSON名称 含义
id select_id 该SELECT标识符
select_type NULL 该SELECT类型
table table_name 输出行的表
partitions partitions 匹配的分区
type access_type 连接类型
possible_keys possible_keys 可供选择的索引
key key 实际选择的指数
key_len key_length 所选键的长度
ref ref 列与索引进行比较
rows rows 估计要检查的行数
filtered filtered 按表条件过滤的行的百分比
Extra NULL 附加信息

六、索引过多的缺点

  1. 增加写的压力
  2. 增加 MySQL 查询优化器的选择时间。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352