mysql数据库学习之sql调优思路

mysql调优的大致思路
1.定位到执行慢的sql语句

首先执行

show VARIABLES LIKE '%quer%'

可以得到
在这里插入图片描述
第一个表示慢日志是否开启,默认关闭,第二表示慢日志的文件的位置。
一般执行时间超过10秒的sql语句就会被放进这个文件里面(10秒是默认值,可以修改),这样就可以定位到执行慢的sql语句。

2.用explain分析执行慢的语句

运行

EXPLAIN UPDATE person_info_large_myisam SET account=account WHERE id BETWEEN 1 AND 200000

可以得到

在这里插入图片描述
每个字段的意思:
ID:表示查询中执行select子句或操作表的顺序,当id相同时,按从上到下的顺序执行,id不同时,id数值大的先执行。

 
select_type:select_type代表的是查询的类型,主要是用于区别普通查询,联合查询,子查询。
    SIMPLE :简单的select查询,查询中不包含子查询或者UNION。
    primary:查询中若包含任何的子查询,最外层查询则被标记为primary。
    subquery:表示子查询。
    dervied:zai from列表中包含的子查询标记为derived(衍生) mysql会递归执行浙西子查询,把结果放在临时表里。
    UNION 若第二个SELECT出现在UNION之后,则被标记为UNION:若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVE
    union result :从union表获取结果的select。

 
table:表示执行的表

 
type:type所显示的是查询使用了哪种类型…
这个字段很重要,从好到坏的顺序是:

system > const > eq_ref > ref > range > index > all

一般来说,至少要保证能达到range级别。
     system:该类型表示表中只有一行记录
     const:常量匹配,表示通过索引一次就可以找到数据
     eq_ref:唯一性索引扫描,对于每个索引建,表中只有一条记录和它匹配
     ref 非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体
     range:只查找范围内的数据,使用索引来匹配行,查询的范围缩小了,自己比前面的类型性能更好
     index:(full index scan)全索引文件扫描比all要好不少,将直接从索引数据结构中找寻数据,比全表扫描理论上快不少
     all: Full Table Scan 将遍历全表以找到匹配的行

 
possible_keys: 显示可能应用在这张表中的索引,一个或多个,但不一定会使用到

 
keys:显示查询语句中实际使用的索引,如果没有使用则为null

 
key_len: 显示索引中使用的字节数,通过key_len计算查询中使用的索引长度,在不损失精确性的情况下索引长度越短越好,key_len显示的值为索引字段最可能的长度,并非是实际使用长度
 

ref:显示索引的那一列被使用了,如果可能的话,最好是一个常数。

 
**rows:**根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,越少越好

 
extra:包含十分重要的额外信息
    Usiing filesort:说明mysql读数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,mysql无法利用索引完成的排序称为"文件排序".
    Using temporary:使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。
    Using index:表示相应的select操作中使用了覆盖索引,.
    Using where : 表明使用了where过滤
    Using join buffer:表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些
    impossible where:where子句的值总是false,不能用来获取任何元组

 

3.对对应的sql语句进行优化

通过一些提高性能的经验来修改sql语句,或者让sql走索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值