慢查询sql索引优化

模拟大量数据表、脚本

explain执行计划属性含义

1,id值越大越先执行,id相同顺序执行
2,select_type:simple、primary、subquery、derived衍生、union、union result

select_type含义sql
simple简单的select查询,查询中不包含子查询或者unionexplain select * from employees join dept_emp on employees.emp_no= dept_emp.emp_no where employees.emp_no=10;
primary子查询中,最外层的查询explain SELECT * FROM employees WHERE employees.emp_no = (SELECT MAX(emp_no) FROM employees);
subquery子查询explain SELECT * FROM employees WHERE employees.emp_no = (SELECT MAX(emp_no) FROM employees);
derivedfrom列表中包含了子查询,mysql会递归执行这些子查询,把结果放在临时表中explain select * from employees join (SELECT MAX(emp_no) t1 FROM employees) temp on employees.emp_no= temp.t1;
union查询中包含union表示并集并且去重,union all不去重explain select * from employees where first_name = ‘xyz’ union select * from employees where last_name = ‘xyz’;
union resultunion去重结果explain select * from employees where first_name = ‘xyz’ union select * from employees where last_name = ‘xyz’;

3,type访问类型

type含义举例
nullmysql不访问任何表,索引,直接返回结果explain select now();
system系统表,少量数据,不需要磁盘io,mysql5.7显示all
const命中主键primary key或者唯一unique索引;被连接部分是一个常量const值explain select * from employees where emp_no=3;
eq_ref前表的每一行,后表只有一行被扫描。1join查询,2命中主键或非空唯一索引,3等值连接explain select * from dept,emp where emp.id=dept.id;
ref非唯一性索引扫描,返回匹配某个单独值的所有行。
rangewhere之后出现between,<,>,in等操作explain select * from employees where emp_no<=3;
index需要扫描索引上全部数据。explain select emp_no,first_name from employees;
all全表扫描

4,extra额外的执行信息

extra含义举例
using filesort排序字段为非索引字段,或者组合索引中非左索引倒序explain select emp_no,first_name from employees order by birth_date desc;
using temporary需要建立临时表暂存中间结果,常见于order by和group byexplain select count(*),last_name from employees group by last_name;
using index二级索引字段和主键满足查询要求,不需要回表,效率好explain select count(*),first_name from employees group by first_name;

show profiles

MySQL提供可以用来分析当前会话中SQL语句执行的资源消耗情况。
MySQL调优–03—show profiles 和 show processlist

索引优化

1,组合索引
1.1,组合索引,只要字段匹配成功即可,与字段顺序无关
1.2,组合索引,最左匹配
1.3,组合索引中,非最左字段使用范围查询,会导致组合索引中范围字段后边的所有字段索引不生效。

2,不要在索引列上进行运算操作,索引将失效

explain select * from table where substring(name,3,2)='科技'

3,字符串不加单引号,导致索引失效。因为mysql优化器会进行类型转换
4,尽量使用覆盖索引,避免select *,会导致回表
5,or前后需要都使用索引,引起索引合并,索引才能生效。如果一侧使用索引会导致索引失效。多表查询中哪怕or两边都带有索引也会导致索引失效。遇到or尽量用union或者union all代替。
6,以%开头的like模糊查询,导致索引失效。
7,索引列数值重复概率大,mysql以为使用索引比全表扫描慢,会不使用索引。
8,is null或者is not null会根据值null或者非null比例判断是否值得使用索引。
9,普通索引中,in走索引,not in索引失效。主键索引in和not in都走索引。
10,多个普通索引字段,只会生效一个,其他索引会失效。如果条件中包含几个字段,尽量使用组合索引。

sql优化

order by优化:

1,查询字段尽量使用索引字段和主键,减少回表。
2,order by排序字段有多个时,尽量要么同时递增,要么同时递减。
3,排序前后顺序尽量和组合索引字段顺序一致。
4,如果必须使用到filesort时,max_length_for_sort_data大小和query语句取出的字段总大小,来判断一次扫描还是两次扫描,可以适当提高sort_buffer_size和max_length_for_sort_data系统变量,来增大排序区的大小,提高排序效率。

子查询优化:

子查询会生成临时表,效率低于连接join查询。

limit优化:

比如 limit 100000,10,mysql需要排序前100010记录,仅仅返回最后10条记录,其他记录丢弃,查询排序代价非常大。
方式1:索引上完成排序分页操作,最后根据主键关联回原表所需要的其他列数据。

select * from employees join(select emp_no from employees
where first_name like 'x%' order by birth_date desc
limit 100000,10) as tempwhere employees.emp_no=temp.emp_no;

方式2:只适用于主键自增。

select * from employees
where first_name like 'x%' and emp_no>100000 order by emp_no asc
limit 10;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chromium CI/CD 之Jenkins实用指南2024- Windows节点开启SSH服务(七)

1.引言 在现代软件开发和持续集成的过程中&#xff0c;自动化部署和远程管理是不可或缺的关键环节。SSH&#xff08;Secure Shell&#xff09;协议以其强大的安全性和灵活性&#xff0c;成为连接和管理远程服务器的首选工具。对于使用Windows虚拟机作为Jenkins从节点的开发者而…

十、面向对象基础

文章目录 学习目标一、面向对象介绍二、类和对象2.1 类2.2 对象2.3 类的设计2.4 self语句的使用三、魔法方法3.1 对象操作的魔法方法3.2 运算符相关的魔法方法四、内置属性4.1 把对象当做一个字典使用五、类属性和对象(实例)属性六、私有属性和方法学习目标 说出面向对象和面向…

Visual Studio Code 实现远程开发

Background 远程开发是指开发人员在本地计算机上进行编码、调试和测试&#xff0c;但实际的开发环境、代码库或应用程序运行在远程服务器上。远程开发的实现方式多种多样&#xff0c;包括通过SSH连接到远程服务器、使用远程桌面软件、或者利用云开发环境等。这里我们是使用VSCo…

1.虚拟机相关的博文推荐

虚拟机的安装&#xff1a; 在VMware中安装CentOS7&#xff08;超详细的图文教程&#xff09;_vm安装centos7-CSDN博客 虚拟机的网络配置&#xff1a; 【汇总】虚拟机网络不通(Xshell无法连接虚拟机)排查方法-CSDN博客

【操作系统】文件管理——文件共享与保护,文件系统的结构(个人笔记)

学习日期&#xff1a;2024.7.18 内容摘要&#xff1a;文件共享&#xff0c;文件保护&#xff0c;文件系统的层级结构和全局结构&#xff0c;虚拟文件系统 文件共享 操作系统提供的文件共享功能&#xff0c;可以让多个用户共享使用同一个文件。文件共享和文件复制是不一样的&a…

蜣螂算法(BSO)及Python和MATLAB实现

蜣螂算法&#xff08;Beetle Swarm Optimization Algorithm&#xff0c;BSO&#xff09;是一种启发式优化算法&#xff0c;受到昆虫领域中蜣螂群体的启发而提出。蜣螂算法模拟了蜣螂在搜索食物时的协作行为和集体智慧&#xff0c;旨在解决复杂优化问题。通过模拟蜣螂之间的信息…

python ATM实现

代码要求&#xff1a; 详细代码&#xff1a; money 50000000 name input("输入您的姓名 &#xff1a;")#查询功能 def search(show_header):if show_header:print("--------查询余额--------")print(f"{name}&#xff0c;您好&#xff0c;您的余额…

gitlab新建仓库

总贴 每个git网站都有不同的创建项目的方式&#xff0c;现在举例gitlab&#xff0c;其他例如gitee&#xff0c;gitcode&#xff0c;都是差不多的&#xff0c;自行百度 1![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dae875d9048940c0aeb292c07d6a4a62.png)1和2是项…

简约的悬浮动态特效404单页源HTML码

源码介绍 简约的悬浮动态特效404单页源HTML码,页面简约美观,可以做网站错误页或者丢失页面,将下面的代码放到空白的HTML里面,然后上传到服务器里面,设置好重定向即可 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8&q…

matlab 异常值检测与处理——Robust Z-score法

目录 一、算法原理1、概述2、主要函数3、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠翻译,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、概述 Robust Z-score法也被称为中位数绝对偏差法。它类似于Z-sc…

Hive修改表中的某个值

Hive要修改表中的某个值&#xff0c;如何实现&#xff1f; Hive是一个数据仓库工具&#xff0c;它提供了数据的静态查询功能&#xff0c;而不能处理在线事务。Hive不支持传统的Update、Delete操作。如果需要修改表中的某个值&#xff0c;可以尝试以下两种方案&#xff1a; 1、…

WebRTC音视频-前言介绍

目录 效果预期 1&#xff1a;WebRTC相关简介 1.1&#xff1a;WebRTC和RTC 1.2&#xff1a;WebRTC前景和应用 2&#xff1a;WebRTC通话原理 2.1&#xff1a;媒体协商 2.2&#xff1a;网络协商 2.3&#xff1a;信令服务器 效果预期 1&#xff1a;WebRTC相关简介 1.1&…

排序算法(4)之快速排序(2)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序算法(4)之快速排序(2) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

第一篇:VUE介绍

1、概念: 是一款用于构建用户界面的js框架,基于html、css、js构建,提供了一套声明式的、组件化的编程模型。目前由于使用vue开发的组件繁多,已然形成了一个vue生态。 2、特点: 1)渐进式框架:使用者可以根据需要引入框架的部分功能,逐步增强,而不是一开始就引入全部…

剧本杀小程序搭建,为商家带来新的收益方向

近几年&#xff0c;剧本杀游戏成为了游戏市场的一匹黑马&#xff0c;受到了不少年轻玩家的欢迎。随着信息技术的快速发展&#xff0c;传统的剧本杀门店已经无法满足游戏玩家日益增长的需求&#xff0c;因此&#xff0c;剧本杀市场开始向线上模式发展&#xff0c;实现行业数字化…

linux中list的基本用法

内核链表 1 list_head 结构 为了使用链表机制&#xff0c;驱动程序需要包含<linux/types.h>头文件&#xff0c;该文件定义了如下结构体实现双向链&#xff1a; struct list_head {struct list_head *next, *prev; };2 链表的初始化 2.1 链表宏定义和初始化 可使用以…

汽车免拆诊断案例 | 卡罗拉急加速抖动故障排除

车型信息 2017年改款卡罗拉&#xff0c;排量1.2T&#xff0c;行驶里程48800公里。 故障现象 车辆不管在什么状态下&#xff0c;只要是平缓加速&#xff0c;都不会有抖动。车辆静止时&#xff0c;急加速时&#xff0c;也不会有抖动。但是车速达40公里/小时以上&#xff0c;急加…

【python基础】基本数据类型

文章目录 一. Python基本数据类型1. 整数1.1. python的四种进制1.2. 数中的下划线 2. 浮点数3. 复数4. 布尔型5. 运算符5.1. 算术运算符5.2. 比较运算符5.3. 逻辑运算符5.4 运算符优先级 6. 常量 二. 注释三. Python之禅 一. Python基本数据类型 1. 整数 无长度限制&#xff1…

基于深度学习的人脸表情识别系统

1. 引言 详细内容&#xff1a; 人脸表情识别在很多应用领域中有着重要的作用&#xff0c;比如情绪分析、心理健康监测、人机交互等。基于深度学习的方法可以显著提高人脸表情识别的准确性。YOLO&#xff08;You Only Look Once&#xff09;系列模型在实时目标检测中表现优异&…

PWM再理解(1)

前言 昨天过于劳累&#xff0c;十点睡觉&#xff0c;本来想梳理一下PWM&#xff0c;今天补上。 PWM内涵 PWM全称&#xff1a;Pulse Width Modulation&#xff0c;也就是脉宽调制的意思&#xff0c;字面意思理解就是对脉冲的宽度进行改变。准确就是通过数字输出对模拟电路进行…