mysql 性能调优概述

1.查看执行计划

id:操作表顺序。

id不同,执行顺序从大到小,id相同,执行顺序从上到下。

select_type:select类型

Simple:简单查询,不包含子查询或union

Primary:最外层的查询

Subquery:子查询

Union:union之后的查询

Dependent subquery:依赖于外查询的子查询

table:操作的表名

type:找到对应行的扫描方式

ALL:全表扫描

index:遍历所有树

range:对索引树进行范围扫描

ref:使用非唯一索引或唯一索引前缀进行查询

eq_ref:多表连接中,使用主键或唯一索引进行查询

const/system:根据主键或唯一索引进行查询

NULL:不需要访问表结构或索引直接得到结果

key:实际使用到的索引

ref:使用哪些列或常量来查找数据

rows:扫描行的数量

Extra:其它关键信息

Using filesort:在没有索引的列上进行排序

Using index:不需要回表

Using where:部分条件不在索引中

Using temporary:使用临时表来存储结果集,常用于分组

2.聚簇索引与非聚簇索引

mysql中索引的分类:
聚簇索引:索引的数据和基表的数据放在一块,叶子节点存放的是完整的行数据,类似与Oracle的IOT表。
非聚簇索引:索引的数据和基表的数据分开存放

示例:

建议使用聚簇索引访问表,且不回表扫描:

如果条件访问的是a,条件是b(覆盖索引),但使用的是非聚簇索引:

这种方式其实比前一种代价要大

如果是select *,则使用非聚簇索引扫描,且回表扫描:

3.多个等值条件查询如何调优:

sql调优方面之前写过一篇有实例可以参考,虽然是PG但是sql调优都是通用的。

PG sql调优案例学习_pg库的多表联查如何优化-CSDN博客

另外建复合索引需要关注前缀性和可选性:

例如:

select   ......  where A=100 and B =100;

select   ......  where A=100 and C = 100;

则建复合索引的时候应该A放在前面 例如A,B 

如果建立的是B,A,C,那么第一条会走索引,第二条不会走索引。

即 复合索引的第一个索引字段,必须出现在where条件当中。

4.like语句条件查询如何进行调优

非前缀模糊会使用索引: like   ’dba%‘

前缀模糊无法使用索引: like   ’%dba‘
 

5.多表连接查询调优

mysql 连接顺序只有nl和hash join 不支持merge 。

首先还是老规矩了,大表驱动小表。

之前PG有写过,sql调优是通用的。

PG sql调优案例学习_pg库的多表联查如何优化-CSDN博客

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值