mysql程序员MySQL

1 SQL查询优化

2018-02-25  本文已影响185人  紫霞等了至尊宝五百年

SQL语句优化

1. 获取有性能问题SQL的方法

2.慢查询日志介绍

2.1 性能

开销较低,主要来自于磁盘I/O和存储日志所需磁盘空间,对于现代磁盘,主要问题就只在于所需的大量存储空间了

2.2 位置控制

也可通过脚本定时控制

2.3常用日志分析工具

2.3.1 mysqldumpslow(MySQL官方自带)




实例查询

2.3.2 pt-query-digest(推荐使用)

生成日志服务器及日志文件名
生成到slow.rep

执行vi slow.rep


提供信息远多于mysqldumpslow生成的

3. 实时获取

通过此表
实例

3.SQL的解析预处理及生成执行计划

3.1 查询速度为什么会慢

MySQL服务器处理查询请求的整个过程

3.2 查询缓存对SQL性能的影响

Hash查找只能进行全值匹配

命中缓存,在返回结果前,MySQL会检查用户权限,查询无需被解析,看出缓存直接返回结果其实很不容易
如果缓存中结果正确的,每次缓存牵涉到表被更新,都要对缓存也进行刷新,如此即使是同一个sql语句即使对同一个表查询中不同不涉及的字段被更新,下次查询这个sql同样无法命中
此外每次在对缓存进行检查SQL是否命中时,都要对缓存加锁


不建议使用查询缓存

3.3 执行计划



3.3.1 可能造成MySQL生成错误的执行计划的原因



3.3.2 MySQL优化器可优化的SQL类型

3.4 确定查询处理各个阶段所消耗的时间

3.4.1使用profile

set profile = 1;
启动profiel,这是一个会话级别的配置

3.4.2使用performance_schema(MySQL5.6后默认开启)

启动监控项

上述执行结果

4 对特定SQL的查询优化


一个存储过程实例

4.1如何修改大表的结构


主从方式
减少主从延迟,操作有工具加减单

数据示例表
alt语句

执行过程
验证表确实被修改

4.2 如何优化not in和<>查询

下面为优化sql

4.3 使用汇总表优化查询


汇总表
显示每个商品评论数
上一篇下一篇

猜你喜欢

热点阅读