MySQL语句优化

MySQL语句优化

  • 1.通过EXPLAIN分析低效SQL的执行计划
  • 2.使用索引(其下测试效率通过查询结果的type列的值进行评判)
    • 1)对于创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会被使用, 举例说明如下:
    • 2)对LIKE语法的测试
    • 3)IS NULL 条件测试
    • 4)OR 测试
    • 5)WHERE条件中不同类型测试
    • 6)不建议在查询条件中使用函数
    • 7)不等于(!=和<>)比较符的使用
    • 8)大于小于(>或<)比较符的使用
  • 3.语句优化
    • 1)INSERT优化
    • 2)GROUP BY优化
    • 3)ORDER BY优化
      • 最优排序
      • 效率对比

使用wk_test_table表进行以下测试,已有复合索引(按照先后顺序):(attachment_type,extension)

1.通过EXPLAIN分析低效SQL的执行计划

通过EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序,比如对wk_test_table. file_size字段做求和(sum)操作,相应 SQL 的执行计划如下:

EXPLAIN SELECT SUM(sp.file_size )
FROM wk_test_table as sp

请添加图片描述

如上图所示每个列的简单解释如下:
select_type:表示 SELECT 的类型,常见的取值有:

SIMPLE(简单表,即不使用表连接 或者子查询)
PRIMARY(主查询,即外层的查询)
UNION(UNION 中的第二个或者后面的查询语句)
SUBQUERY(子查询中的第一个SELECT)等。

table:输出结果集的表。
type:表示表的连接类型,性能由好到差的连接类型为:

system(表中仅有一行,即常量表)。
const(单表中最多有一个匹配行,例如primary key或者unique index)。
eq_ref(对于前面的每一行,在此表中只查询一条记录,简单来说,就是多表连接中使用primary key或者unique index)。
ref(与eq_ref类似,区别在于不是使用primary key或者unique index,而是使用普通的索引)。
ref_or_null(与ref类似,区别在于条件中包含对NULL的查询)。
index_merge(索引合并优化)。
unique_subquery(in的后面是一个查询主键字段的子查询)。
index_subquery(与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询)。
range(单表中的范围查询)。
index(对于前面的每一行,都通过查询索引来得到数据)。
all(对于前面的每一行,都通过全表扫描来得到数据)。

possible_keys:表示查询时,可能使用的索引。
key:表示实际使用的索引。
key_len:索引字段的长度。
rows:扫描行的数量。
filtered:返回结果的行占需要读到的行(rows列的值)的百分比。
Extra:执行情况的说明和描述。

2.使用索引(其下测试效率通过查询结果的type列的值进行评判)

1)对于创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会被使用, 举例说明如下:

图一:请添加图片描述
图二:
请添加图片描述
图三:
请添加图片描述

结论:
从三图比较来看 ,即便where条件中不使用attachment_type,extension字段的组合条件,索引仍然能用到,这就是索引的前缀特性(按照索引列顺序查询)。但是如果只按 extension条件查询表,虽然索引能被用到,但效率也是非常的不好。

2)对LIKE语法的测试

图一:
请添加图片描述
图二:
请添加图片描述

结论:

  1. 从图一可见 ,第一个SQL没有用到了索引,且效率很差,而第二个SQL使用索引,效率高于第一个SQL,区别就在于“%”的位置不同,前者把“%”放到第一位就执行效率极低,而后者没有放到第一位就执行效率略高。
  2. 从图二可知,如果like后面跟的是一个列的名字,会与双边%效率一样

3)IS NULL 条件测试

请添加图片描述

结论:
由图可见 , 如果列名是索引,使用 is null 条件时候效率较高。但是is not null条件会导致索引失效。

4)OR 测试

请添加图片描述

备注:第一条sql执行时只有复合索引 (attachment_type,extension),第二条sql执行时新增普通索引extension

结论:

  1. 由图可见 , 使用OR连接的所有条件列必须都有自己的索引(复合索引的第一个列或者单个普通索引),否则查询不会使用索引,效率极低。
  2. 对于同一字段,使用OR和IN,EXPLAIN展示的效率都是一样的。

5)WHERE条件中不同类型测试

请添加图片描述

结论:

  1. 由图可见 , 可见在attachment_type这个列上存在索引,两个SQL都用到了索引,但是第二个SQL语句的where条件中 字符常量值是int型,与attachment_type数据类型不相符,导致执行效率极低。
  2. 所以,如果列类型是字符串,那么一定记得在where条件中把字符常量值用引号引起来,否则即便这个列上有索引,MySQL执行效率也是极低的,因为MySQL默认把输入的常量值进行转换以后才进行检索。

6)不建议在查询条件中使用函数

使用函数就会操作索引列,会导致索引失效而转向全表扫描。

7)不等于(!=和<>)比较符的使用

在使用不等于(!=或者<>)的时候 无法使用索引会导致全表扫描。

8)大于小于(>或<)比较符的使用

最左索引使用>或<的时候 无法使用索引会导致全表扫描。

3.语句优化

1)INSERT优化

批量插入推荐使用以下语法:

insert into test values(1,2),(1,3),(1,4)

2)GROUP BY优化

请添加图片描述

结论:
由图可知,MySQL会对GROUP BY之后的字段进行自动排序,这样会产生排序造成的不必要消耗。如果查询包括GROUP BY,但用户想要避免排序结果的消耗,则可以指定ORDER BY NULL禁止排序。

3)ORDER BY优化

  1. 无过滤条件(无where和limit)的order by 必然会出现 Using filesort。
  2. 过滤条件中的字段和order by 后跟的字段的顺序不一致,必然会出现 Using filesort。
  3. order by后跟的字段排序即有DESC也有ASC,必然会出现Using filesort。
  4. where条件的值确定,且order by后跟了跟了where条件的排序字段(order by 字段去除定值字段后剩余单字段),即使order by后跟的字段和组合索引字段顺序不一致,也不会出现Using filesort。

最优排序

请添加图片描述

效率对比

请添加图片描述

单/多字段order by:

  1. 对查询条件和排序列创建联合索引,排序没有Using filesort,高效。
  2. 对查询条件创建索引,但是排序列没有索引, 排序有Using filesort,不用索引。
  3. 对排序列创建索引,但是查询条件没有索引, 排序有Using filesort,不用索引。

结论:

  1. 由图可见,order by子句,尽量使用index方式排序,避免使用filesort方式。
  2. 走不走索引还是跟where条件里的字段是否建立索引有关,如果where条件里字段未建立索引,那查询不会使用索引,建立联合索引,减少了using_filesort的排序操作,可以提高查询效率。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql语句

查询 select 查询显示的列表 from 表名 select类似于&#xff1a; system.out.print(查询显示的列表), 特点: 1.查询列表可以是: 表中的字段,常量值,函数,表达式 2.查询出的表格是虚拟的表格(临时表格) 一基础查询 1.查询表中单个字段 date #1.查询表中单个字段 select us…

Mysql基本语句

1、数据库的基本类型 1.关系数据库 特点&#xff1a;以表和表的关联构成的数据结构 优点&#xff1a;能表达复杂的数据关系。强大的查询语言&#xff0c;能精确查找想要的数据 缺点&#xff1a;读写性能比较差&#xff0c;尤其是海量数据的读写。数据结构比较死板 用途&am…

MySQL的基本语句

目录 1.什么是数据库 2.数据库的操作 2.1.显示数据库 2.2.创建数据库 2.3.使用数据库 2.4.删除数据库 3.数据类型 3.1数值类型 3.2字符串类型 3.3日期类型 4.表的操作 4.1创建表 4.2往表中增加信息 5.删除表 1.什么是数据库 数据库大体可以分为关系型数据库和非关系…

MySQL 操作语句大全(详细)

sql语句总结 总结内容1. 基本概念2. SQL列的常用类型3. DDL简单操作3.1 数据库操作3.2 表操作 4. DML操作4.1 修改操作&#xff08;UPDATE SET&#xff09;4.2 插入操作&#xff08;INSERT INTO VALUE&#xff09;4.3 删除操作&#xff08;DELETE&#xff09; 5. DQL操作被操作…

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

Chrome观看高分辨率60fps视频卡顿、丢帧问题的 问题记录

朋友的一台笔记本观看YouTube和哔哩哔哩的高分辨率视频卡成PPT 系统 是 win10企业版LTSC 版本号1809&#xff0c;使用的是Chrome浏览器 配置是i58250UhHD620,观看油管4k以上视频满负荷 安装WIN10的V9解码器. 安装V9解码器还是很卡顿&#xff0c;后来发现是谷歌浏览器的硬件加速…

酷睿i5 8250u相当于什么水平 i58250u属于什么级别

i5 8250u是笔记本处理器&#xff0c;制程工艺14nm&#xff0c;拥有4核心&#xff0c;8线程&#xff0c;cpu主频1.6GHz&#xff0c;睿频3.4GHz&#xff0c;三级缓存6MB&#xff0c;集成HD620显卡&#xff0c;显卡频率300MHz&#xff0c;最大动态频率1.1GHz&#xff0c;BGA插槽13…

学计算机的用hd620,HD620核显相当于什么独立显卡 HD620核心显卡性能评测

2017年初&#xff0c;intel推出全新七代Kaby Lake架构处理器&#xff0c;无论是笔记本还是台式机都进行覆盖&#xff0c;这一代不仅仅是CPU性能提升&#xff0c;其内置的核显也进行了升级。七代笔记本CPU内置的HD620核显相当于什么独立显卡呢&#xff1f;下面装机之家来先带大家…

HD2500显卡驱动linux,intel hd 2500驱动下载

Intel HD Graphics 2500显卡驱动程序是一款可以有效解决Intel HD Graphics 2500显卡出现的一些问题的驱动工具&#xff0c;本站提供了可以在win10系统中使用的windows版Intel HD Graphics 2500显卡驱动下载地址。有需要的朋友们可以前来下载使用。 Intel HD Graphics 2500/4000…

小米笔记本Air 13.3 指纹版安装黑苹果 macOS High Sierra 10.13 教程

注意&#xff1a;本教程只适用于「小米笔记本Air 13.3 指纹版 i5-7200U」&#xff0c;别的型号哪怕是小米笔记本Air 13.3 非指纹版或者小米笔记本Pro都会存在问题。且安装新系统这件事本身存在风险&#xff0c;有可能造成数据丢失&#xff0c;请谨慎尝试&#xff01;本教程不对…

inter uhd graphics630显卡驱动_现有190个UHD频道

欧洲通信卫星公司Michel Chabrol(高级副总裁/新电视格式)在戛纳秋季电视节节目市场的开幕式上表示&#xff0c;其数据显示&#xff0c;现在有190个超高清频道或节目信号源&#xff0c;比一年前增长了20%。 卫星传送是超高清频道的主要传送方式&#xff0c;共有93个直接频道(共1…

hd620显卡驱动 linux,倍控工控机i7 7500U PVE下核显HD620 HDMI直通成功

折腾软路由的工控机 6口 i7 7500U的时候想把HDMI接口之前接入显示器显示虚拟机WIN10的界面,查了老半天才解决,下面顺一下我的步骤。 本教程在6.0测试通过 检查CPU是否支持VT-d 虚拟机创建的时候注意一下4点: 1.不要设置开机自启动 2.如果只是直通核显设备,不要像网上那些教…

win10笔记本电脑双系统 安装黑苹果系统macOS 小白黑苹果乐园下载资源简便安装黑苹果方式,非常详细,还有资源!

马上就要考研咯&#xff0c;今天还是作死研究安装了下黑苹果&#xff0c;罪恶感啊 言归正传&#xff0c;接下来将献上我的黑苹果教程 首先呢第一步下载你所需要的macOS系统&#xff0c;地址如下 https://imac.hk/category/macos/ 这里也有我的几个保存在百度网盘里的黑苹…

英特尔核显驱动hd630_【惊喜提升】英特尔第十代Cometlake台式机处理器详解与简单评测...

【0、前言】 第十代还有4个月左右才会发布,本文所测试的处理器性能并不代表实际上市后的具体情形(本文的结果会偏低)。这也并不影响你选择9代或AMD平台,早买早享受,因为等到十代价格趋于稳定合理,至少还要等半年以上,英特尔最近几代并不会出现价格下跌的现象(超级保值)…

【黑苹果 Hackintosh】Delll成就5468(Vostro 5468)黑苹果

目录 一、缺点&#xff1a; 二、下面是我的配置&#xff1a; 三、过程&#xff1a; 前言 开始前说一哈&#xff1a;用腻了pr和ae剪辑&#xff0c;想体验fcpx&#xff0c;但是手边只有一台win本&#xff0c;所以黑一下。之前一直担心驱动不全不敢黑&#xff0c;但是看来已经…

Thinkpad T480 Win7 安装 INTEL HD620显卡驱动

问题描述 Thinkpad T480安装Win7操作系统,使用驱动精灵安装驱动程序,安装显卡驱动时无法正常安装。 解决方法 去Intel官网下载显卡驱动: 文件:win64_154519.4678.zip https://downloadcenter.intel.com/download/26836/Intel-Graphics-Driver-for-Windows-15-45- 解…

i7 8700k 安装linux,Intel i7 8700K核显UHD620安装黑苹果仿冒HD620方法

摘要 时过境迁现在Intel i7 8700K问世了,最一代的Graphics UHD620被很多的笔记本采用,如:联想 小新潮7000、宏碁 蜂鸟Swift3、戴尔 灵越7570-R2645S、华硕 灵耀360、惠普 薄锐ENVY 13-ad103TX等等。有些童鞋和发烧友追求高配来安装黑苹果系统,最新的MacOS High Sierra黑苹果…

英特尔hd630驱动,intel hd graphics 630驅動

如果您收到此錯誤訊息,請參閱錯誤解決方案檔 :所安裝的驅動程式未針對這台電腦進行驗證。 相關主題. 瞭解Intel Graphics Driver 版本號碼 Intel Graphics ... ,Intel HD Graphics 510 / 530 / 630 Driver. 需要重新啟動. This package provides the driver for 6th and 7th…

hd630支持分辨率_UHD630相当于什么显卡?HD630和UHD630核显区别大吗?

众所周知,intel七代Kaby Lake处理器搭载的是HD620核心显卡,而最新上市的第八代Cannon Lake架构,i7 8700K、i5 8600K/8400等型号均搭载了新UHD630核心显卡,命名上UHD630和HD630有所不同,那么UHD630相当于什么显卡?HD630和UHD630核显区别大吗?下面装机之家小编来科普一下。…

intel hd 620 win7驱动终于装好了XD

解决方案&#xff0c;360驱动大师&#xff0c; 要装几次才可以。终于发现360有用途的地方了。XD 然后重启机器。 相关链接在这里 &#xff1a;https://download.csdn.net/download/haimian520/71915041 文件是从我的电脑驱动备份的好像是&#xff0c;时间久了忘记了。下载解压…