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及索引优化的更多相关文章

  1. 面试题: mysql 数据库已看 sql安全性 索引 引擎 sql优化

    总结的一些MySQL数据库面试题 2016年06月16日 11:41:18 阅读数:4950 一.sql语句应该考虑哪些安全性? (1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语 ...

  2. MySQL的or/in/union与索引优化

    转载自:MySQL的or/in/union与索引优化 https://blog.csdn.net/zhangweiwei2020/article/details/80005590 假设订单业务表结构为 ...

  3. MySQL数据库导入到SQL Server

    EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL2', @srvproduct=N'mySQL', @provider=N'MSDASQL', ...

  4. mysql数据库批量执行sql文件对数据库进行操作【windows版本】

    起因: 因工作需要,在本机测试环境升级mysql数据库,需逐条执行mysql数据库的sql文件对数据库进行升级,因此找了些关于mysql的文章,对批量升级数据库所需的sql文件进行升级. 整理思路: ...

  5. SQL Server 索引优化-----数据库引擎优化顾问

    本文将根据“数据库引擎优化顾问”(DTA)来发现无用或缺失的索引. 要使用“数据库引擎优化顾问”,首先需要对数据库负载进行监控,为数据库负载分析准备数据.从SSMS的工具中,打开SQL Server  ...

  6. MySQL数据库开发常见问题及几点优化!

    从一下三个方面考虑: 库表设计 慢 SQL 问题 误操作.程序 bug 时怎么办 一.库表设计 1.1.引擎选择 在 MySQL5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运 ...

  7. MySQL 高级 视图 事物 触发器 函数 索引优化

    视图 1.什么是视图 ​ 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ​ 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view t ...

  8. [转]SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】一周搞定

    对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感 谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当 ...

  9. MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]

    对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...

随机推荐

  1. [LeetCode] Majority Element II 求大多数之二

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. Note: The a ...

  2. TemplateBuilder Android Studio

    TemplateBuilder:是Android Studio的一个开发模板,大大提高开发效率.

  3. oracle 存储过程分页

    将分页的存储过程封装到包中,包规范 create or replace package pkg_query as type cur_query is ref cursor; PROCEDURE prc ...

  4. vue 项目总结

    第一次参与设计前端项目 项目接近尾声,抽出时间写一下总结 项目用到技术 vue vue-cli (代理配置) element-ui axios router 技术应用思路 vue 组件封装---技术点 ...

  5. python 字符类型

    1.整型 int 短整型在window中是2**30--2**39 长整型 long 在python中不区分长短 2.浮点数 float 一般是小数 3.复数 4.boolen类型(布尔类型) 运算结 ...

  6. js运用6

    ---恢复内容开始--- 1.   逻辑运算   ||      &&       ! || 遇到第一个为true的数字就终止并返回,如果完全没有就返回最后一个值 && ...

  7. 怎样把Word文档导入Excel表格

    Word是现在办公中的基础文件格式了,很多的内容我们都通过Word来进行编辑,那么当我们需要将Word文档里的信息导入到Excel里面的时候,我们应该怎样做呢?下面我们就一起来看一下吧. 操作步骤: ...

  8. Golang覆盖写入文件的小坑

    记录一点Golang文件操作的笔记,环境:Ubuntu // 删除文件 func removeFile() { err := os.Remove("test.txt") if er ...

  9. Python------excel读、写、拷贝

    #-----------------------读excel-----------------#1 打开方式 索引.名字#2 获取行数据 sheet.row_values(0):获取某行第n到m列(n ...

  10. 类加载(四):spring-boot-loader 模块

    1. spring-boot jar包结构 2. 正常情况下,java -jar的类加载器是AppClassLoader 但是spring 使用自定义的URLClassLoader加载我们写的clas ...