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. 共享存储ISCSI

    建立共享iscsi磁盘组 资源环境 服务端:192.168.2.131 客户端:192.168.2.[110,169] 服务端磁盘: [root@centos ~]# lsblk NAME MAJ:M ...

  2. Grafana如何利用Karpenter消除50%的云资源浪费?|落地案例

    原文链接: https://grafana.com/blog/2023/11/09/how-grafana-labs-switched-to-karpenter-to-reduce-costs-and ...

  3. mysql8可以创建虚拟列作为公式映射字段

    普通的表 加个字段 此时再查 想改这个虚拟字段? 没门,他不能被修改.只能改那个被映射的原字段 我们看看表结构定义 好了,明白了,你就是个影分身!

  4. CodeForces - 1398C Good Subarrays

    CodeForces - 1398C 挺简单的题目,但是没有想到还是整理一下 方法1 把每个元素都减1,那么满足题意的就是一段和的值是0,然后维护前缀和,如果发现这个前缀和之前出现过,就说明有满足题意 ...

  5. vant+vue控制列表展开

    <van-list v-model="loading" :finished="finished" finished-text="没有更多了&qu ...

  6. ibatis源码学习(一)整体设计和核心流程

    本文主要从ibatis框架的基本代码骨架进行切入,理解ibatis框架的整体设计思路,各组件的实现细节将在后文进行分析. 背景  介绍ibatis实现之前,先来看一段jdbc代码:  Class.fo ...

  7. vue之slot和slot-scope

    插槽分两类,默认插槽和具名插槽:通俗理解就是默认插槽是没有名称的插槽,具名插槽是有名称的插槽. 何时使用插槽?简单的举个栗子:有2个组件,父组件father,子组件son. 父组件 father &l ...

  8. ARTHAS 使用

    1.概述 ARTHAS是阿里巴巴 出品的一款java监控工具,本文介绍以下他的基本使用方法. 2.基本操作 2.1 启动 java -jar arthas-boot.jar 2.2 基础命令 命令 说 ...

  9. web移动端基础

    1.像素密度 PPI 说到屏幕就离不开2个因素,屏幕大小和屏幕分辨率. PPI是Pixels Per Inch缩写,pixels per inch所表示的是每英寸所拥有的像素(pixel)数目. PP ...

  10. ant 组件全局设置中文 vue

    //引入中文组件import zhCN from 'ant-design-vue/es/locale/zh_CN';//定义 const  locale = zhCN   //包裹根组件 <a- ...