Mysql调优之使用mysql慢查询日志优化sql语句及表索引

一,用慢查询日志找出耗时语句,并优化

# 查看mysql系统慢查询变量配置(能看到慢查询日志是否开启,日志路径等)

SHOW VARIABLES LIKE '%slow%';

SHOW VARIABLES LIKE '%slow%';

查询结果示例:
Variable_name Value
log_slow_admin_statements OFF
log_slow_slave_statements OFF
slow_launch_time 2
slow_query_log OFF
slow_query_log_file E:\\deploy\\mysql-5.7.17-winx64\\data\\WIN-0UEGEHC41P1-slow.log

# 开启mysql慢查询日志

SET GLOBAL slow_query_log=ON; # 默认值是 OFF

# 查看慢查询时间(默认值是10.000000,即10s)
SHOW VARIABLES LIKE "long_query_time";

慢查询日志里面主要字段:
timestamp:时间戳
Time:语句执行时间点
连接字符串信息。
Query_time: 查询时间
Lock_time: 锁定时间
Rows_sent:发送数据行数
Rows_examined:检查数据行数

#查看一共执行过几次慢查询:
SHOW GLOBAL STATUS LIKE '%slow%';

通过慢查询日志找到耗时唱的语句,示例:SELECT * FROM myTableName WHERE source_sha1='熊仔其人' AND service_type=0; 那么继续用 EXPALIN 命令分析该条语句。

# MySQL 提供了一个 EXPALIN 命令,可以用于对 SELECT 语句 的执行计划进行分析,并详细的输出分析结果,供开发人员进行针对性的优化。我们想要查询一条sql有没有用上索引,有没有全表查询,这些都可以通过explain这个命令来查看。通过explain命令,我们可以深入了解到MySQL的基于开销的优化器,还可以获得很多被优化器考虑到的访问策略的细节以及运行sql语句时哪种策略预计会被优化器采用。explain的使用十分简单,通过在查询语句前面加一个explain关键字即可。(例如查看查看SQL是否使用索引)

EXPLAIN SELECT * FROM myTableName WHERE source_sha1='熊仔其人' AND service_type='0';

#查看该表数据量:

SELECT COUNT(*) FROM myTableName;

# 在 MySQL 中,可以使用 SHOW INDEX 语句查看表中已存在的索引。

SHOW INDEX FROM myTableName;


二,根据慢查询语句条件字段创建索引,删除无效索引

# 针对慢查询,一般做法是针对where条件后面的字段创建索引。

ALTER TABLE myTableName ADD INDEX idx_souce;  # 用add index_name 可以创建 PRIMARY KEY
ALTER TABLE myTableName ADD INDEX idx_source_sha1_service_type (source_sha1, service_type);

创建索引命令格式:

### add index mysql 语句

# 1.PRIMARY  KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) # 2.UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE (`column` ) # 3.INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) # 4.FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column` ) # 5.多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

创建索引

alter table table_name add index_name using btree('column_name',...,'column_name');

create unique index index_name on table_name('column_name');

两者区别:

(1)add index_name 支持一次多个索引创建alter table table_name add index_name using btree('column_name',...,'column_name'),add index_name using btree('column_name',...,'column_name')

(2)add index_name 可以创建 PRIMARY KEY

(3)create index 创建时必须制定index_name,alter 可以使用默认名

删除无效索引:

# 索引删除
alter table table_name drop index index_name;

【完】

Mysql调优之使用mysql慢查询日志优化sql语句及表索引的更多相关文章

  1. mysql如何处理亿级数据,第一个阶段——优化SQL语句

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  2. MySQL调优三步曲(慢查询、explain profile)

    在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql ...

  3. MySQL 调优/优化的 100 个建议

    MySQL 调优/优化的 100 个建议   MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...

  4. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  5. mysql调优 基础

    MySQL调优可以从几个方面来做: 1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样 ...

  6. 数据库MySQL调优实战经验总结

    MySQL 数据库的使用是非常的广泛,稳定性和安全性也非常好,经历了无数大小公司的验证.仅能够安装使用是远远不够的,MySQL 在使用中需要进行不断的调整参数或优化设置,才能够发挥 MySQL 的最大 ...

  7. MySQL调优 —— Using temporary

      DBA发来一个线上慢查询问题. SQL例如以下(为突出重点省略部分内容): select distinct article0_.id, 等字段 from article_table article ...

  8. 数据库MySQL调优实战经验总结<转>

    数据库MySQL调优实战经验总结 MySQL 数据库的使用是非常的广泛,稳定性和安全性也非常好,经历了无数大小公司的验证.仅能够安装使用是远远不够的,MySQL 在使用中需要进行不断的调整参数或优化设 ...

  9. MySQL调优 优化需要考虑哪些方面

    MySQL调优 优化需要考虑哪些方面   优化目标与方向定位 总体目标:使得响应时间更快,吞吐量更大. (throughout --- 吞吐量:单位时间内处理事务的数量) 如何找到需要优化的地方 使用 ...

  10. 【总结】mysql调优

    一.事务 1.事务的特性 (1)原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行. (2)一致性(Consistency),可以理解为数据是满足完整性约束的,也就是 ...

随机推荐

  1. python之执行shell命令

    python 执行shell命令,且执行完后将shell端的输出返回 subprocess import subprocess # 要执行的命令 command = "ls -lrt&quo ...

  2. getPropByPath:根据字符串路径获取对象属性 : 'obj[0].count'

    function getPropByPath(obj, path, strict) { let tempObj = obj; path = path.replace(/\[(\w+)\]/g, '.$ ...

  3. dateFormater:格式化时间

    function dateFormater(formater, t){ let date = t ? new Date(t) : new Date(), Y = date.getFullYear() ...

  4. html中input标签放入小图标

    直接上代码 <style type="text/css"> *{ margin: 0; padding: 0; } .box{ width: 200px; positi ...

  5. div跟随浏览器大小而改变

    <head> <style> .main { position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; ...

  6. GObject学习笔记(一)类和实例

    前言 最近阅读Aravis源码,其中大量运用了GObject,于是打算学习一下. 此系列笔记仅主要面向初学者,不会很深入探讨源码的细节,专注于介绍GObject的基本用法. 此系列笔记参考GObjec ...

  7. ArkTs布局入门01——线性布局(Row/Column)

    1.概述 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置.组件按照布局的要求依次排列,构成应用的页面. 在声明式UI中,所有的页面都是由自定义组件构成,开发者可以根据自己的需求,选 ...

  8. 对象存储 COS 推出一站式内容审核服务,助力打造绿色互联网

    今年,国家网信办深入推进"清朗·春节网络环境"专项行动.截至3月24日,网信办共累计清理相关违法违规信息208万余条,处置账号7.2万余个,协调关闭.取消备案网站平台2300余家. ...

  9. JDK 18 最新动态和 JDK 19 新特性预测

    JDK 18 最新动态和 JDK 19 新特性预测_语言 & 开发_Michael Redlich_InfoQ精选文章 里面提到文章 定界延续(delimited continuations) ...

  10. Java代码覆盖率super-jacoco

    开源项目地址 https://gitee.com/didiopensource/super-jacoco 项目流程 项目架构 部署步骤 注意:一定要用Linux服务器部署,不要用Windows 准备L ...