mysql 索引失效 explain关键字分析

为什么要使用索引

当表记录过多,查询效率低下,通过合理的添加索引可以提高查询效率。

什么情况下不需要使用索引

  1. 表记录少
  2. 表需要频繁更新
  3. 查询字段使用频率表低

explain

select_type sql语句的查找类型

simple

普通查询

SELECT id FROM orders

subquery

包含子查询的外层的类型为primary

EXPLAIN SELECT (SELECT id from orders) from orders;

primary

包含子查询的 外层的第一条记录为primary

EXPLAIN SELECT (SELECT id from orders) from orders;

union union result

包含union的结果集,在union和union all语句中,因为它不需要参与查询,所以id字段为null

EXPLAIN SELECT id from orders union select id from goods;

type 索引类型

system

const 的特殊情况,只有一条记录的时候或者是空表

const

使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const

eq_ref

关键字:连接字段主键或者唯一性索引。

  • 此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果. 并且查询的比较操作通常是 '=', 查询效率较高.

ref

普通非唯一索引,使用“=”值健查询非主键,或者使用了最左前缀规则索引查询,关联查询的时候,关联字段都需要建立索引

range

索引范围查询,常见于使用>,<,is null,between ,in ,like等运算符的查询中。

index

关键字:条件是出现在索引树中的节点的。可能没有完全匹配索引。

  • 索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可
    以使用索引排序或者分组的查询。

all

这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录

possible_keys

此次查询中可能选用的索引

key

查询时候,真正使用的索引

key_len

用于处理查询的索引长度。只计算查询时候使用的索引长度,如果是多列索引。并且只计算where条件使用到的索引长度,排序时候使用到索引也不会计算该索引的长度

ref

如果是关联查询,被驱动表的执行计划这里会显示驱动表的关联字段
如果是条件使用的表达式或者函数,或者内部发生了隐式转换,则会显示func
如果使用了常熟或者等值查询,会显示const

rows

执行计划中估算饿的扫描行数,不精确 myisam是精确值,innodb 使用了mvcc机制,值不准确

extra关键字段

  • distanct
    select中使用了distanct关键字
  • no tables used
  • using filesort
  1. 排序的时候无法使用索引,常见于order by , group by
  2. MySQL会使用一个外部的索引排序,不是按照索引顺序排序读取
  3. mysql无法利用索引完成排序成为文件排序
  • using index
    查询的时候,不需要通过回表查询,直接通过索引记录就可以获取信息
  1. 表示相应的查询中,使用了覆盖索引,避免了访问表的的数据行
  2. 如果同时出现了using where, 说明索引被用来执行查找索引键值
  3. 如果没有同时出现using where, 说明索引用来读取数据,而不是用来执行查找操作
  • using temporary
    使用临时表存储中间结果
  • using where
    表示存储引擎返回的记录并不是所有的都满足查询条件,需要在server层进行过滤。
    查询条件中分为限制条件和检查条件,5.6之前,存储引擎只能根据限制条件扫描数据并返回,然
    后server层根据检查条件进行过滤再返回真正符合查询的数据。5.6.x之后支持ICP特性,可以把检
    查条件也下推到存储引擎层,不符合检查条件和限制条件的数据,直接不读取,这样就大大减少了
    存储引擎扫描的记录数量。extra列显示using index condition

索引失效分析

  1. 组合索引全匹配
  2. 遵循最左前缀原则
  3. 索引不要做任何的操作。计算,函数,类型转换,都会导致索引失效
  4. 在复合索引中,索引字段范围右侧的列,无法使用索引
  5. 尽量使用覆盖索引,可以避免回表操作
  6. 索引上不要使用不等于
  7. 主键字段不要判null 非主键可以判空
  8. 索引字段使用like的通配符不能用在开头
  9. 索引字段如果是字符串要加单引号
  10. 索引字段不要使用or
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342