Mysql数据库优化之SQL及索引优化
1. 如何发现有问题的SQL? 使用mysql慢查询日志对有效率问题的Sql进行监视
(1) show variables like 'slow_query_log'; 查看慢查询日志是否开启
(2) set global slow_qeury_log_file = '/home/mysql/sql_log/mysql_slow.log' 设置慢查询日志文件的位置
(3) set global log_queries_not_using_indexes = on 把没有使用索引的SQL存入慢查询日志
(4) set global long_query_time = 1 设置时间限制,即超过这个时间的SQL就记录到日志中
这里可以使用查看变量的方式,查看上面参数的默认值 比如:show variables like 'slow%' 可以看到慢查询日志的默认存放位置
2. 慢查询日志包含的内容

3. 常用的慢查询日志分析工具
(1) mysqldumpslow 工具(一般在安装mysql时就已经有了) 用法: mysqldumpslow + 参数 + 慢查询日志文件路径
常用参数:

-t 数字: 显示前n条日志 可以使用mysqldumpslow -h 查看所有可携带的参数
(2) pt-query-digest 工具

使用这个工具分析慢查询日志时的输出 共有三部分:
第一部分:显示日志的时间范围,总的SQL数量和不同的SQL数量

第二部分:

第三部分:显示具体的SQL语句

4.根据日志中的指标发现有问题的SQL
(1) 查询次数多且每次查询占用时间长的SQL 通常为pt-query-digest分析的前几个查询
(2) IO大的SQL 注意pt-query-digest 分析中的Rows examine (即扫描的行数)项
(3) 未命中索引的SQL 注意pt-query-digest 分析中Rows examine 和 Rows Send 的对比
5. 有问题的SQL被发现后,使用explain从句查询SQL的执行计划,explain返回的是一个表格,下面是各列的含义:


const: 通常是对主键或唯一索引的查找
eq_reg: 范围查找
ref: 连接查找,基于索引
range: 基于索引范围查找
index: 对索引的扫描
ALL: 对整个表的扫描

5. 优化子查询
尽量使用连表查询代替子查询

当有重复数据时,可以使用distinct进行去重。
6. 优化limit查询

(1) 优化方案:使用有索引的列或主键进行order by 操作
(2) 优化方案:记录上次返回的主键,在下次查询时使用主键过滤(方向就是避免扫描过多的记录)
select film_id, description from film where film_id > 55 and film_id <= 60 order by film_id limit 1,5
Mysql数据库优化之SQL及索引优化的更多相关文章
- 面试题: mysql 数据库已看 sql安全性 索引 引擎 sql优化
总结的一些MySQL数据库面试题 2016年06月16日 11:41:18 阅读数:4950 一.sql语句应该考虑哪些安全性? (1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语 ...
- MySQL的or/in/union与索引优化
转载自:MySQL的or/in/union与索引优化 https://blog.csdn.net/zhangweiwei2020/article/details/80005590 假设订单业务表结构为 ...
- MySQL数据库导入到SQL Server
EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL2', @srvproduct=N'mySQL', @provider=N'MSDASQL', ...
- mysql数据库批量执行sql文件对数据库进行操作【windows版本】
起因: 因工作需要,在本机测试环境升级mysql数据库,需逐条执行mysql数据库的sql文件对数据库进行升级,因此找了些关于mysql的文章,对批量升级数据库所需的sql文件进行升级. 整理思路: ...
- SQL Server 索引优化-----数据库引擎优化顾问
本文将根据“数据库引擎优化顾问”(DTA)来发现无用或缺失的索引. 要使用“数据库引擎优化顾问”,首先需要对数据库负载进行监控,为数据库负载分析准备数据.从SSMS的工具中,打开SQL Server ...
- MySQL数据库开发常见问题及几点优化!
从一下三个方面考虑: 库表设计 慢 SQL 问题 误操作.程序 bug 时怎么办 一.库表设计 1.1.引擎选择 在 MySQL5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运 ...
- MySQL 高级 视图 事物 触发器 函数 索引优化
视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view t ...
- [转]SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】一周搞定
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感 谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当 ...
- MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...
随机推荐
- STS中如何使用lombok
Lombok有什么用使用Lombok时需要注意的点Lombok的安装spring boot集成LombokLombok常用注解@NonNull@Cleanup@Getter/@Setter@Gette ...
- vscode c++ 编译生成后,调试时无法命中断点
//test.cpp #include <stdio.h> ; void print_line(char *str) { if (str != NULL) printf("%s\ ...
- Cocoapods 创建自己的公开库、私有库
如何创建自己的共有库 1.注册Trunk trunk需要CocoaPods 0.33版本以上,用pod --version 命令查看版本 CocoaPods版本 如果版本低,需要升级: sudo ge ...
- Golang & GitLab-CI 详细实例步骤
1.安装GitLab-Runner 1)curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi- ...
- Centos6.8 安装spark-2.3.1 以及 scala-2.12.2
一.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面,Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流 ...
- kaggle竞赛-保险转化-homesite
时间格式的转化 查看数据类型 查看DataFrame的详细信息 填充缺失值 category 数据类型转化 模型参数设定 结论 该项目是针对kaggle中的homesite进行的算法预测,使用xgbo ...
- 查看oracle数据库是否为归档模式
查看oracle数据库是否为归档模式 [1] 1.select name,log_mode from v$database; NAME LOG_MODE --------------- ...
- MySQL数据库导出
因为业务需要,把MySQL查询的数据导出成csv文件,操作在Navicat中完成. 首选用SELECT语句查询数据,然后Navicat的导出,然后选csv,选路径,再加上首栏就可以了
- EasyUI combogrid/combobox过滤时限制只能选择现有项
在使用EasyUI的combogrid时可以通过输入进行过滤,达到快速选择的目的,但是手工输入不存在的项也不会出错,结果提交到数据库后就会产生错误. 比如idField是int型的,输入的数据通过是检 ...
- 怎样把Word文档导入Excel表格
Word是现在办公中的基础文件格式了,很多的内容我们都通过Word来进行编辑,那么当我们需要将Word文档里的信息导入到Excel里面的时候,我们应该怎样做呢?下面我们就一起来看一下吧. 操作步骤: ...