IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL的慢sql优化 -> 正文阅读

[大数据]MySQL的慢sql优化

针对慢sql优化思路整理,一共可以分为以下三步

一、开启慢查询

二、通过explain关键字进行sql语句的分析

三、具体的优化步骤

1、首先要避免全表扫描,检查是否有索引

2、查看索引是否生效(以下是索引失效的部分场景)

3、sql结构的优化

4、数据库表设计的优化

一、开启慢查询

开启慢查询有两种方式:

1??修改配置文件

windows下:配置文件为my.ini,一般在mysql的安装目录下,或c:\\windows下

linux下:配置文件为my.cnf,一般在/etc下

在配置文件的[mysqld]下加入如下语句

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1

2??通过数据库开启慢查询

修改配置文件需要重启mysql sever进程mysqld才会生效,线上环境可以通过指令来开启慢查询

set global slow_query_log = 'ON':设置参数为ON,开始慢查询
set global slow_query_log_file = '/slowlog/log.log':记录超时的语句的文件夹
set global long_query_time = 2:超过该时间的语句会被记录到日志中

二、通过explain关键字进行分析

其中比较重要的几个参数

1、possible_keys:可能使用到的索引
2、key:实际上使用到的索引
3、type:查询使用的类型
4、rows:查询到需要的数据,扫描了多少行

对于type,从坏到好all < index < range < ref < eq_ref < const

一般保证达到range,ref最好(const写死一个常量、eq_ref针对主键或唯一键查询结果唯一、ref针对非唯一键查询多个、range索引范围查询、index全索引扫描、all全表扫描)

三、具体的优化步骤

1、首先要避免全表扫描,检查是否有索引

  • 没有索引考虑是否建立索引(可以在经常需要查询的列上、需要排序的列上添加索引)

2、查看索引是否生效(以下是索引失效的部分场景)

  • 不满足最左匹配原则
  • like以%开头或者全模糊
  • >、<号右边的索引会失效
  • or也会导致索引失效(在or的两边都加索引才不会失效或者使用union(去重)、union all(不去重)替代or)
  • !=、<>也会导致索引失效
  • 在where子句中使用表达式操作、函数操作等

3、sql语句结构的优化

  • 避免使用select*,不要返回不必要的字段,增加索引覆盖的概率
  • 尽量减少子查询(子查询会创建临时表,查询完毕删除临时表)
  • 调整where子句的连接顺序,将过滤数据多的条件放在前面,最快速度缩小结果集
  • 尽量减少联表查询,联表查询是笛卡尔乘积的形式,检索的数据几何倍上升
  • 一次查询的结果最好不要过大,可以使用分页查询

4、数据库表设计的优化

  • 单表的字段最好不要超过20个。如果是比较大的表,有的字段使用的多,有的字段使用比较少,使用频率比较少的会拖慢查询速度
  • 表的结构是否合理(范式、反范式需要结合实际场景来决定)
  • 列类型的选择是否合适(能用int却用了bigint等)
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:39:55  更:2021-11-12 19:42:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:48:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码