SQL优化

一、SQL优化简介

  • 解释:对于特定的要求,使用更有的SQL策略或索引策略,以达到让结果呈现的时间更短,从而提升操作效率的过程就是SQL优化。
  • SQL优化包含在数据库级别优化中。我们平常所说的SQL优化就是指优化SQL语句和索引。
  • SQL优化是伴随业务而进行优化的,并不是下面的所有操作都必须都达到才是最好的优化。

二、常规调优思路(众多解决方案之一)

  • 查看slow-log,分析slow-log,分析出查询慢的语句。
  • 按照一定优先级,进行一个一个的排查所有慢语句。
  • 分析top sql,进行explain调试,查看语句执行语句。
  • 调整索引或语句本身。

MySQL日志支持

一、MySQL5.7中日志分类

​       MySQL日志分类四类:错误日志(回滚等)、二进制日志(主从)、通用查询日志(记录查询等信息)、慢查询日志

二、通用查询日志

  • 通用查询日志是记录建立的客户端连接和执行的语句
  • 通过show variables like '%version%';查看版本信息

  • 可以通过show variables like '%general%'查看通用查询日志是否卡开启 general_loh 属性取值
    • OFF 表示关闭(默认关闭)
    • ON 表示打开

  • 通过查看日志输出格式
    • File存储在数据库的数据文件中的主机名.log C:\ProgramData\MySQL\MySQL Server 5.7\Data
    • TABLE 存储在数据库中的mysql/general_log

  • 临时开启/关闭通用日志(重启失效)
# 开启
set global general_log = on;
# 关闭
set global general_log = off;
  • 临时设置输出格式(重启失效)
# mysql/general_log
set global log_output-'TABLE';
# 主机名-slow.log
set global log_output='FILE';
# 两者都输出
set global log_output='FILE,TABLE';

  • 永久设置。修改MySQL配置文件
  • windows中日志文件在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini中。
  • 按需配置

  • 配置后重启MySQL服务
  • 日志文件中时间和系统时间不一致问题
  • 查看系统日志文件格式 show variables like '%log_timestamps%';
  • 修改日志文件时间格式为系统时间 set global log_timestamps = SYSTEM

三。错误日志

  • MySQL错误日志记录MySQL运行过程中较为严重的警告和错误信息,以及MySQL启动和关闭的详细信息。以及MySQL每次启动和关闭的详细信息。
  • 通过show variables like '%log_error%';查看
  • binlog_error_action 错误处理方式
  • ABORT_SERVER出现问题终止服务
  • IGNORE_ERROR忽略错误
  • log_error错误日志文件名及路径
  • log_error_verbosity记录级别
  • 取值1表示记录警告信息
  • 大于1表示所有警告信息都记录
  • 日志文件可以通过文本编辑器打开。

四、二进制日志

  • 包含所有更新数据(新增、删除、修改、改表等)SQL信息的记录。
  • MySQL主从配置就依赖这个日志文件
  • 通过show variables like '%log_bin%';查看二进制日志

  • 二进制日志不可以通过修改全局参数开启。全局匹配值问下(my.ini)中该参数是注释的。
# binary Logging
# log-bin

直接设置log-gin的值为日志文件名。

# Binary Logging
log-gin=mylogbin

设置后重启MySQL服务会发现log_bin参数值为ON

  • 开启后二进制文件存储在C:\ProgramData\MySQL\MySQL Server 5.7\Data。里面有个xxx.index文件(这个文件成为二进制文件索引)里面存储了所有二进制文件清单。当重启MySQL服务或过一定时间后会自动生成一个二进制文件。增加的二进制文件编号递增。也可以使用flush logsl命令生成一个新的二进制文件。
  • 也可以通过命令:show binary log;查看目前生成的日志文件。
  • 由于是二进制文件,所以无法直接使用文本编辑器打开,需要借助工具才可以看见。
  • 在navicat或sql命令中输入mysql show binlog events in 'mylogbin.000003';
  • 在命令行输入,借助mysqlbinlog工具
  • 输入命令式要在日志文件所在文件夹路径中运行,也可以在命令中写上日志文件全路径
  • D:/a.sql可以没有,没有表示直接大隐刀控制台mysql mysqlbinlog mylogbin.000003 > D:/a.sql
  • binlog中除了删除IAO创建表的SQL都是加密的,如果希望看见可以使用下面命令
  • 直接打印到控制台会出现中文乱码mysql mysqlbinlog -base64-output=deode-rows -v mysqlbin.000003 > D:/a.sql

五、慢查询日志

  • 记录所有执行时间超过long_query_time秒的所有查询或不适用于索引的查询
  • long_query_time默认时间为10秒。即超过10秒的查询都认为是慢查询
  • 慢查询日志默认名称:住进-slow.log
  • 除了查看my.ini文件以外通过show variables like '%query%';查看

    • slow_query_log 表示是否开启慢查询日志。(默认开启)
    • slow_query_log_file 慢查询日志文件名
    • long_query_time慢查询阈值设置,查处为慢查询。此值直接设置全局参数可能无效,建议测试直接修改配置文件。
    • log_queries_not_using_index是否记录不适用于索引的查询(前提是slow_query_log开启)
    • 可以通过命令查看慢查询日志中慢查询SQL命令的个数。也可以使用文本编辑器直接打开慢查询日志文件。也可以查看mysql.slow_log表中的额数据(前提log_output值包含table)
show status like '%slow_queries%';

SQL高级优化(四)之SQL优化的更多相关文章

  1. MySQL性能优化(四):SQL优化

    原文:MySQL性能优化(四):SQL优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ ...

  2. SQL高级优化系列

    目录 SQL高级优化系列(一)之MySQL优化 SQL高级优化系列(二)之MySQL架构 SQL高级优化系列(三)之存储引擎 SQL高级优化系列(四)之SQL优化 SQL高级优化系列(五)之执行计划 ...

  3. SQL高级优化(一)之MySQL优化

    不同方案效率对比 MySQL各字段默认长度(一字节为8位) 整型: TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字 ...

  4. MySQL性能优化方法四:SQL优化

    原文链接:http://isky000.com/database/mysql-performance-tuning-sql 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需 ...

  5. SQL高级优化(五)之执行计划

    一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如 ...

  6. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  7. 使用ORACLE SQL Tuning advisor快速优化低效的SQL语句

    ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案 (1)为统计信息丢失或失效的对象收集统计信息   (2)考虑优化器的任何数据偏差.复杂谓词或失效的统计信 ...

  8. 转://从一条巨慢SQL看基于Oracle的SQL优化

    http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...

  9. 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)

    本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...

随机推荐

  1. windows 显示引用账户已被锁定,且可能无法登录

    今天遇到一个比较尴尬的事情,清理笔记本键盘时,在锁屏界面多次碰到enter键,在登录界面被锁定无法登录. 一开始慌了,因为没遇到过这样的问题.百度一看方法不少,便开始尝试, 有的说是重启进入安全模式, ...

  2. JSP九大内置对象及四个作用域详解

    一共有九大内置对象: request.response.out.session.application.pageContext.page.config.exception 内置对象(又叫隐含对象),就 ...

  3. Redis哨兵 部署和配置

    目录 一.哨兵简介 哨兵介绍 哨兵原理 二.哨兵部署 环境介绍 哨兵配置 三.使用验证 一.哨兵简介 哨兵介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在 ...

  4. 如何查看Python中所有关键字

    一.保留字即关键字,我们不能把它们用作任何标识符名称.Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字 import keyword print(keyword.kwli ...

  5. 虚拟机快照和linux基础命令

    虚拟机快照 磁盘"快照"是虚拟机磁盘文件(VMDK)在某个点及时的副本.可以通过使用恢复到快照来保持磁盘文件和系统存储. 1.拍摄快照 拍摄快照前先关机,然后右键点击虚拟机=> ...

  6. CF1057B DDoS 题解

    Content 有一个长度为 \(n\) 的数列 \(a_1,a_2,...,a_n\),求出满足 \(\sum\limits_{i=l}^r a_i>100\times(r-l+1)\) 的区 ...

  7. 我的邮箱客户端程序Popmail

    05年的时候写了一个邮箱客户端程序.当时主要目的是研究POP3和SMTP协议,同时锻炼自己的网络编程能力.当然了,如果自己写的邮箱客户端能够满足自身的日常工作需要,而不是频繁的登录不同的网页邮箱,那就 ...

  8. PowerDotNet平台化软件架构设计与实现系列(09):消息平台

    消息队列已经几乎成为大中型高吞吐应用的标配,继续根据我们一贯的节约代码的风格,为了复用的目标,抽象出消息队列平台,进行消息队列管理. 环境准备 1.(必须).Net Framework4.5+ 2.( ...

  9. SpringBoot整合redis实现过期key监听事件

    Spring整合redis实现key过期事件监听:https://www.cnblogs.com/pxblog/p/13969375.html 可以用于简单的过期订单取消支付.7天自动收货场景中 1. ...

  10. 【LeetCode】1033. Moving Stones Until Consecutive 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 脑筋急转弯 日期 题目地址:https://leet ...