Mysql执行计划和索引

Sql优化(索引类型、失效场景、执⾏计划)
1、执⾏计划

是SQL在数据库中执⾏时的表现情况,通常⽤于SQL性能分析,优化等场景。在MySQL使⽤ explain 关键字来查看SQL的执⾏计划

2、如何查看sql执⾏计划

在查询语句前加explain关键字,作用如下:

  1. 查看表的读取顺序,根据id大小判断,id越大优先级越大,id相同则按顺序执行
  2. 查看数据库读取操作的操作类型
  3. 查看哪些索引有可能被⽤到
  4. 查看哪些索引真正被⽤到
  5. 查看表之间的引⽤
3、字段分析:
  1. id:select 查询的序列号,包含⼀组数字,表示查询中执⾏Select⼦句或操作表的顺序(d值相同:执⾏顺序由上⽽下;id值不同:id值越⼤优先级越⾼)

  2. select_type:表示SELECT语句的类型。

  3. table:显示这查询的数据是关于哪张表的。

  4. type:区分索引,这是重要的列,显示连接使⽤了何种类型。从最好到最差的连接类型为:

system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery

> range > index > ALL

⼀般来说,得保证查询⾄少达到range级别,最好能达到ref,到index就可以

  1. possible_keys:指出MySQL能使⽤哪个索引在该表中找到⾏。如果是空的,就是没有相关的索引

  2. key:实际使⽤到的索引。如果为NULL,则没有使⽤索引

  3. key_len:最⻓的索引宽度。如果键是NULL,⻓度就是NULL。在不损失精确性的情况下,⻓度越短越好。

  4. ref:显示使⽤哪个列或常数与key⼀起从表中选择⾏

  5. rows:显示MySQL认为它执⾏查询时必须检查的⾏数

  6. Extra:执⾏状态说明,该列包含MySQL解决查询的详细信息

4、优化

SELECT语句务必指明字段名称(避免直接使⽤select * )

SQL语句要避免造成索引失效的写法

SQL语句中IN包含的值不应过多

当只需要⼀条数据的时候,使⽤limit 1

如果排序字段没有⽤到索引,就尽量少排序

如果限制条件中其他字段没有索引,尽量少⽤or

尽量⽤union all代替union

避免在where⼦句中对字段进⾏null值判断

不建议使⽤%前缀模糊查询

避免在where⼦句中对字段进⾏表达式操作

Join优化 能⽤inner join 就不⽤left join right join,如必须使⽤ ⼀定要已⼩表为驱动 A left join B

5、索引的类型

普通索引、唯⼀索引、主键索引、复合索引

6、失效场景

使⽤函数或表达式查询、使⽤ NOT 或 != 操作符、使⽤or操作符、对索引列进⾏运算、like模糊查

询前置%、多个索引查询,只有第⼀个有效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值