MYSQL查询优化(二)

MYSQL一次千万级连表查询优化(二) 概述:交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的功能,这算是离职人员挖下的坑,随着数据越来越多,原本的SQL查询变得越来越慢,用户体验特别差,因此SQL优化任务交到了我手上。 这个SQL查询关联两个数据表,一个是攻击IP用户表主要是记录IP的信息,如第一次攻击时间,地址,IP等等,一个是IP攻击次数表主要是记录每天IP攻击次数。而需求是获取某天攻击IP信息和次数。(以下SQL 阅读详情

1、优化数据类型

(1)避免使用NULL

  NULL对于大多数数据库都需要特殊处理,MySQL也不例外,它需要更多的代码,更多的检查和特殊的索引逻辑,有些开发人员完全没有意识到,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0、-1作为默认值。

(2)仅可能使用更小的字段

   MySQL从磁盘读取数据后是存储到内存中的,然后使用cpu周期和磁盘I/O读取它,这意味着越小的数据类型占用的空间越小,从磁盘读或打包到内存的效率都更好,但也不要太过执着减小数据类型,要是以后应用程序发生什么变化就没有空间了。修改表将需要重构,间接地可能引起代码的改变,这是很头疼的问题,因此需要找到一个平衡点。

 

2、小心字符集转换

  客户端或应用程序使用的字符集可能和表本身的字符集不一样,这需要MySQL在运行过程中隐含地进行转换,此外,要确定字符集如UTF-8是否支持多字节字符,因此它们需要更多的存储空间。

 

3、优化count(my_col)和count(*)

   如果你使用MyISAM表,在没有where子句的情况下使用count(*)速度是很快的,因为行数量的统计是非常精确的,因此MySQL不会一行一行地去找,进而得出行数,如my_col列没有空值,那么和前面说的情况会一样,即count(my_col) 速度也会很快。

  如果有where子句时使用count(),基本上就无法进行更多优化了,在where子句中超出了明显的索引列,对于复杂的where子句,只有使用覆盖索引才有用。

   除了上面的建议外,你还可以使用汇总表,它们让你可以对表的内容保持更新,你可以使用触发器,或者应用程序逻辑保持汇总表总是最新状态,或者定期运行一个批处理作业保持填充最新的数据信息,如果你采用后者,你的信息将会非常接近,但不是精确的,依赖于批处理作业多久运行一次,这需要权衡应用程序对精确信息的需要,和保持数据更新的系统开销,要在这二者之间找到一个平衡点。

4、优化子查询

   遇到子查询时,MySQL查询优化引擎并不是总是最有效的,这就是为什么经常将子查询转换为连接查询的原因了,优化器已经能够正确处理连接查询了,当然要注意的一点是,确保连接表(第二个表)的连接列是有索引的,在第一个表上MySQL通常会相对于第二个表的查询子集进行一次全表扫描,这是嵌套循环算法的一部分。

 

5、优化UNION

  在跨多个不同的数据库时使用UNION是一个有趣的优化方法,UNION从两个互不关联的表中返回数据,这就意味着不会出现重复的行,同时也必须对数据进行排序,我们知道排序是非常耗费资源的,特别是对大表的排序。

   UNION ALL可以大大加快速度,如果你已经知道你的数据不会包括重复行,或者你不在乎是否会出现重复的行,在这两种情况下使用UNION ALL更适合。此外,还可以在应用程序逻辑中采用某些方法避免出现重复的行,这样UNION ALL和UNION返回的结果都是一样的,但UNION ALL不会进行排序。

海天注塑机弘讯控制器Modbus数据采集实战指南 工业设备数据采集是MES系统、设备监控和工艺追溯的基础,其中注塑机联网是车间数字化的关键环节。Modbus协议作为工业通信的事实标准,以简单、开放、低成本的优势,成为海天注塑机弘讯控制器对外提供数据的主要方式。理解控制器型号与通信参数、捋清寄存器点位表与字节序规则,是稳定采集的前提。通过RS485串口或以太网轮询,可以实时获取产量、温度、压力、报警等关键数据,进而支撑OEE统计、质量追溯与异常监控。本文基于实战项目,以海天注塑机弘讯控制器为例,梳理从接线、参数配置到点位验证的完整流程,为现场工程师提供一套可 阅读详情

相关推荐

别再折腾老教程了!树莓派4B/5最新系统(Raspberry Pi OS Bookworm)红外遥控配置,用gpio-ir驱动一次成功

本文详细介绍了树莓派4B/5在最新Raspberry Pi OS Bookworm系统下配置红外遥控的完整指南,摒弃过时的lirc-rpi驱动,采用现代gpio-ir驱动方案。从硬件连接到软件配置,提供10分钟快速上手指南,涵盖驱动加载、信号测试、按键映射及高级应用场景,帮助用户高效完成红外遥控配置。

weixin_42520909的博客 442

MySQL查询优化二

继上篇记录索引,order by、group by优化,继续记录分页、关联查询的优化。 分页查询优化(limit) select * from employees order by name limit 100000,10; 此sql看似查询10条数据,其真实是查询了100010条数据,随后抛弃前100000条数据,保留最后10条数据。 type为ALL表示全表扫描而且Extra出现Using filesort,此时需要优化尽量让他走索引。我们可以先通过子查询(尽量使用索引)先得到主键id,再

weixin_36279234的博客 515

别再找在线API了!用C#调用微信电脑版自带的OCR,本地识别又快又准

本文详细介绍了如何利用C#调用微信电脑版内置的OCR引擎实现本地文字识别,解决传统云端API的隐私和网络依赖问题。微信OCR具备高精度中文识别、完全离线运行和零成本接入三大优势,特别适合企业文档电子化处理。通过实战代码演示了核心交互逻辑、批量处理流水线和表格数据提取等高级应用场景。

weixin_29295541的博客 590

MySQL慢查询优化【二】

这包括合理地设计表的范式、避免使用过多的关联查询、避免使用过多的列等。举例来说,可以将一些经常一起使用的列放在同一个表中,以减少关联查询的次数。:利用MySQL的查询缓存功能,缓存频繁执行的查询结果,以减少数据库服务器的负载。但需要注意,MySQL的查询缓存在某些情况下可能会降低性能,因此需要评估具体情况是否适合使用。:调整MySQL服务器的配置参数,以适应当前系统的负载和性能需求。综上所述,MySQL慢查询优化涉及多个方面,需要综合考虑数据库结构、查询语句、服务器配置等因素,以达到提高系统性能的目的。

hello_boyu的博客 558

uniapp: err = err.replace(this._UNI_INPUT_DIR_REG, ‘UNI_TypeError: err.replace is not a function问题修复

问题:uniapp的依赖包出现了问题,需要升级解决办法:升级uniapp依赖包,下载"semver"和”@dcloudio/uni-i18n“两个包,本地锁定postcss为7版本,就解决了。

py_boy的博客 1453

软考嵌入式 第五讲 嵌入式Linux系统技术

5.1 inittab配置文件 Linux实时操作系统开机引导时首先启动内核,由内核检查和初始化硬件设备,载入设备的驱动程序模块,安装root文件系统,然后内核将启动一个名为init的进程,它是系统运行的第一个进程,进程号为1。在init运行完成并启动其他必要的后续进程后,系统开始运行,引导过程结束。 在任何时候,可以在文件inittab中添加新的记录项。重新检查inittab文件时,可以通过命令:init q/ Q使init进程立即重新读取并处理文件inittab。 5.1.1 inittab文件记录

Leon的博客 527

mysql版本优化子查询_MySQL优化二之子查询

SQL样例:select * from table_a where id in ( select id from table_b where name = '' )场景说明:MySQL 5.6以下的子查询都会全表扫描table_a然后每条记录去和子查询 table_b 来做join操作理想的情况是 :先查询出子查询里面的内容再和外面的查询进行in操作案例测试:5.5版本子查询:explain...

weixin_34736467的博客 151

【第三方互联】3、腾讯QQ授权第三方登录

当我们创建的 QQ 互联应用成功后,我们便可以开始使用该应用来实现 QQ 互联 一、获取 APP ID 和 APP Key 1、找到我的应用 2、点击应用,进入详情 这样,我们就获取到了 APP ID 和 APP Key 二、进行开发 1、将 APP ID 、APP Key,以及该应用的信息放入项目中的配置文件中,我使用的是SpringBoot,我放在了 application.y...

JACKAL 22万+

MySQL之查询性能优化(二)

查询性能低下最基本的原因是访问的数据太多。某些查询可能不可避免地需要筛选大量数据,但这并不场景。大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化。

Cover_sky的博客 1973

STM32G0/G4无刷电机硬件设计与FOC控制实现

无刷直流电机(BLDC)和永磁同步电机(PMSM)的矢量控制依赖于高精度电流采样、实时SVPWM调制与闭环PI调节等核心技术。其底层实现需兼顾电机本体建模、坐标变换(Clark/Park)、死区补偿及硬件资源约束。STM32G0系列凭借CORDIC协处理器与超低功耗特性,适用于成本敏感型有感FOC应用;而STM32G4集成运放、FMAC滤波器与高级定时器,可支撑高性能无感控制与多源传感融合。该技术广泛应用于机器人关节、智能云台、伺服驱动等场景,是嵌入式电机控制工程师必须掌握的工程化落地能力。

weixin_35751412的博客 122

【11】GD32H7xx MPU记录

GD32H7xx系列MPU内存保护单元模块的使用记录

madao1234的博客 880

mysql查询层级菜单性能优化_MySQL之查询性能优化二

本文将会深入的扒一扒msyql查询的流程,也会讲到一些mysql术语,如:缓存,语法解析器,预处理,执行计划,查询优化器,另外还会讲一讲mysql复杂查询的基础:"关联"。查询缓存:在解析一个查询语句之前,如果查询缓存是打开的,那么mysql会优先检查这个查询是否命中查询缓存中的数据查询优化处理:查询的生命周期的下一步是将一个sql转换成一个执行计划,mysql再依照这个执行计划和存储引擎进行交互...

weixin_42521032的博客 328

FPGA纯Verilog实现I²C主机控制器与EEPROM读写

I²C是一种广泛应用的同步串行总线协议,用于连接微控制器与EEPROM、传感器等低速外设。其核心原理包括开漏结构、主从通信机制、START/STOP时序及ACK/NACK应答流程。技术价值在于硬件资源占用少、布线简洁、支持多从机扩展,特别适合FPGA嵌入式系统中轻量级外设控制。典型应用场景涵盖工业数据存储、配置参数持久化及实时传感器接口。本文基于Xilinx Spartan-6 FPGA,采用纯Verilog HDL实现参数化I²C主机控制器与AT24C02 EEPROM读写验证,深入解析状态机设计、SDA

weixin_33557333的博客 120

Mysql优化(二)查询优化器

mysql优化中,查询优化器,

tedfdndg的博客 1172

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MySQL(二)——查询优化

一、exists和in (1)当B表的数据集小于A表的数据集时,用in优于exists       SELECT * from A WHERE id in (SELECT id from B) 等价于:       for select id from B       for select * from A where A.id

qq_42765068的博客 197

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL优化二之子查询

SQL样例: select * from table_a where id in ( select id from table_b where name = '' )    1. MySQL 5.6以下的子查询都会全表扫描table_a 然后每条记录去和子查询select id from table_b where name = '' 来join   2.但是理想的情

幸福的使者 611

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Mysql 学习(十 二)查询优化 Explain

SUBQUERY:如果包含子查询的查询语句不能够转为对应的semi-join的形式,并且该子查询是不相关子查询,并且查询优化器决定采用将该子查询物化的方案来执行该子查询时,该子查询的第一个SELECT关键字代表的那个查询的select_type就是SUBQUERY。DEPENDENT UNION:在包含UNION或者UNION ALL的大查询中,如果各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询的select_type的值就是DEPENDENT UNION。

qq_41816516的博客 1640

MYSQL优化(二):查询优化

本篇接上一篇 MYSQL优化(一):MySQL 查询过程、查询缓存及 SQL_CACHE与SQL_NO_CACHE的用法关于mysql查询过程可参考上篇文章语法解析和预处理MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树。这个过程解析器主要通过语法规则来验证和解析。比如SQL中是否使用了错误的关键字或者关键字的顺序是否正确等等。预处理则会根据MySQL规则进一步检查解析树是否合法。...

架构师之路 681

Mysql慢查询优化步骤(二)

这篇文章主要是就在公司实习的时候,对SQL优化工作作出的一些整理。 在公司实习的时候,导师分配了SQL慢查询优化的任务,任务是这样的:每周从平台中导出生产数据库的慢查询文件进行分析。进行SQL优化的手段也主要是修改SQL写法,或者新增索引。 现在从记录项目中的一点点做起。 (1)数据库中设置SQL慢查询 一、第一步.开启mysql慢查询   方式一: 修改配置文件 在 my.in...

weixin_42030357的博客 852

mysql 嵌套查询性能_MySQL之查询性能优化(二)

查询执行的基础当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。MySQL执行一个查询的过程,根据图1-1,我们可以看到当向MySQL发送一个请求时,MySQL都做了什么:图1-1 查询执行路径客户端发送一条查询给服务器。服务器先检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段。服务器端进行SQL解析、预处理,再由优化...

weixin_34610364的博客 642

MySQL之查询性能优化二

本文将会深入的扒一扒msyql查询的流程, 也会讲到一些mysql术语,如:缓存,语法解析器,预处理,执行计划,查询优化器, 另外还会讲一讲mysql复杂查询的基础:"关联"。    查询缓存:   在解析一个查询语句之前,如果查询缓存是打开的,那么mysql会优先检查这个查询是否命中查询缓存中的数据 查询优化处理:   查询的生命周期的下一步是将一个sql转换成一个执行...

weixin_30480651的博客 98

MySQL优化 (二)详解慢查询

查询mysql的操作信息 show status -- 显示全部mysql操作信息 show status like "com_insert%"; -- 获得mysql的插入次数; show status like "com_delete%"; -- 获得mysql的删除次数; show status like "com_select%"; -- 获得mysql的查询次数; show status like "uptime"; -- 获得mysql服务器运行时间 show status lik

KobeHoo的博客 268

mysql查询优化之explain使用(二)

explain -- possible_keys mysql 推测可能使用的索引 expiain -- key 实际使用到的索引(当只查询索引的时候并且没有条件,那么将会出现,可能没索引,实际使用了索引) expiain -- key_len key_len表示索引使用的字节数,注意其显示的值为索引字段的最大可能长度,并非实际长度,是根据表定义计算出来的,同样精度下,(也就是对应的数据库...

h15637811412的博客 329

mysql优化二:通过设置索引提高查询效率

MySQL数据库查询流程 mysql客户端通过协议与mysql服务器建立连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用API获取数据,最后返回给客户端。怎么存数据、怎么取数据,都与存储引...

u014732209的博客 486
上一篇: MYSQL查询优化(一)
下一篇: mysql tinyInt1isBit 控制jdbc是否把tinyint(1) 类型当成boolean返回。
zljjava
博客等级 码龄15年 155粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值