当前位置: 首页 > article >正文

MySQL--》快速提高查询效率:SQL语句优化技巧与实践

目录插入数据order by与group by优化limit、count、update优化插入数据在对数据库当中进行插入数据操作通常我们都会使用insert进行插入数据可由于每次insert都会和数据库建立连接频繁的插入数据就会导致效率上的降低这里我们就需要对insert插入数据进行一定程度上的优化insert优化对insert优化主要可以从以下几个方面入手-- 批量插入 insert into tb_test values (1, Tom), (2, Jerry), (3, Bob); -- 手动提交事务 start transaction insert into tb_test values (1, Tom), (2, Jerry), (3, Bob); insert into tb_test values (4, Tom4), (5, Jerry5), (6, Bob6); insert into tb_test values (7, Tom7), (8, Jerry8), (9, Bob9); commit; -- 主键顺序插入 主键乱序插入8 1 9 21 88 2 4 15 89 5 7 3 主键顺序插入1 2 3 4 5 7 8 9 15 21 88 89主键优化原理在InnoDB存储引擎中表数据都是根据主键顺序组织存放的这种存储方式的表称为索引组织表。页分裂当我们插入数据的时候页会进行分裂页可以为空页可以填充一半也可以填充100%每一页包含了2-N行数据(如果一行数据过大行会溢出)根据主键排列主键顺序拆入如下所示如果我们想在下面的数据中再插入50的数据由于前两页数据已经满员因此会开辟一个新的分页然后会找到第一个数据页50%的位置23和47是超出了一半了此时会先将这两个数据移动到新开辟的数据页然后将新数据50再插入到这个数据页此时再对链表指针进行一个重新的排布让1号的数据页的下一个数据页为3号3号后一个数据页才是2号这种重新设置排序位置称为”页分裂“所以乱序插入的情况下可能就会发生页分裂现象页合并当删除一行记录时实际上记录并没有被物理删除只是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用当页中删除的记录达到MERGE_THRESHOLD(默认为页的50%)InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用2号数据页被删除一半数据之后会检索后面3号数据页是否有合并的可能性如果有就合并到2号数据页那么3号数据页就可以空闲出来了空闲出来的数据页如果后面再插入数据的话就可以直接插入到3号数据页当中就可以了主键设计原则1在满足业务需求的情况下尽量降低主键的长度。2插入数据时尽量选择顺序插入选择使用AUTO_INCREMENT自增主键。3尽量不要使用UUID做主键或者是其他自然主键如身份证号。4业务操作时避免对主键的修改。load如果一次性需要插入大批量数据使用insert语句插入性能较低此时可使用MySQL数据库提供的load指令进行插入可以将复合一定规律的文件通过load操作变成表数据使用load加载数据的主要步骤如下所示(这里主键顺序插入的性能也是高于乱序插入)-- 客户端连接服务器时加上参数 --local-infile mysql --local-infile -u root -p -- 查看是否开启本地文件导入开关 select local_infile; -- 设置全局参数local_infile为1开启从本地加载文件导入数据的开关 set global local_infile 1; -- 执行load指令将准备好的数据加载到表结构当中通过逗号分割换行符为止作为一行 load data local infile /root/sql1.log into table tb_user fields terminated by , lines terminated by ;order by与group by优化order by优化对order by进行优化主要分为以下两种情况1Using filesort通过表的索引或全表扫描读取满足条件的数据行然后在排序缓冲区sort buffer中完成排序操作所有不是通过索引直接返回排序结果的排序都叫FileSort排序。2Using index通过有序索引顺序扫描直接返回有序数据这种情况即为using index不需要额外排序操作效率高。-- 没有创建索引时根据agephone进行排序 explain select id, age, phone from emp order by age, phone; -- 创建索引 create index idx_emp_age_phone on emp(age, phone); -- 创建索引后根据agephone进行升序排序 explain select id, age, phone from emp order by age, phone; -- 创建索引后根据agephone进行降序排序 explain select id, age, phone from emp order by age desc, phone desc; -- 创建索引 create index idx_emp_age_phone_ad on emp(age asc , phone desc); -- 创建索引后根据agephone进行降序排序 explain select id, age, phone from emp order by age asc, phone desc;order by使用注意1根据排序字段建立合适的索引多字段排序时也遵循最左前缀法则2尽量使用覆盖索引3多字段排序一个升序一个降序此时需要注意联合索引在创建时的规则(ASC/DESC4如果不可避免的出现filesort大数据量排序时可以适当增大排序缓冲区大小sort_buffer_size(默认256k)group by优化在进行分组操作时也可以通过索引来提高效率当然索引的使用也是需要满足最左前缀法则如下所示limit、count、update优化limit优化一个常见又非常头疼的问题就是limit2000000,10此时需要MySQL排序前2000010记录仅仅返回2000000-2000010的记录其他记录丢弃查询排序的代价非常大优化思路一般分页查询时通过创建覆盖索引能够比较好地提高性能可以通过覆盖索引加子查询形式进行优化explain select * from tb_sku t , (select id from tb_sku order by id limit 2000000,10) a wheret.id a.id;count优化MISAM引擎把一个表的总行数存在了磁盘上因此执行count(*的时候会直接返回这个数效率很高InnoDB引擎就麻烦了它执行count(*的时候需要把数据一行一行地从引l擎里面读出来然后累积计数优化思路一般是通过自己定义的key和value自己进行计算新增就累加删除就累减少自己计数的方式进行count()是一个聚合函数对于返回的结果集一行行地判断如果count函数的参数不是NULL累计值就加1否则不加最后返回累计值。count用法主要有以下几种count(*)InnoDB引擎并不会把全部字段取出来而是专门做了优化不取值服务层直接按行进行累加。count(主键)InnoDB引擎会遍历整张表把每一行的主键id值都取出来返回给服务层服务层拿到主键后直接按行进行累加(主键不可能为null)。count(字段)没not null约束InnoDB引擎会遍历整张表把每一行的字段值都取出来返回给服务层服务层判断是否为null不为nul计数累加有not null约束InnoDB引擎会遍历整张表把每一行的字段值都取出来返回给服务层直接按行进行累加。count(1)InnoDB引擎遍历整张表但不取值服务层对于返回的每一行放一个数字“1”进去直接按行进行累加。按照效率排序的话count(字段)count(主键id)count(1)~count(*)所以尽量使用count(*)。update优化InnoDB的行锁是针对索引加的锁不是针对记录加的锁并且该索引不能失效否则会从行锁升级为表锁update student set no2000100100where id 1; update student set no2000100105 where name韦一笑;

相关文章:

MySQL--》快速提高查询效率:SQL语句优化技巧与实践

目录 插入数据 order by与group by优化 limit、count、update优化 插入数据 在对数据库当中进行插入数据操作,通常我们都会使用insert进行插入数据,可由于每次insert都会和数据库建立连接,频繁的插入数据就会导致效率上的降低&#xff0c…...

隧道环境有毒有害气体在线监测系统方案

利用物联网、数据采集、大数据分析等技术,通过构建稳定、可靠的工业物联网络,工业智能网关能够将实时数据准确、快速地传输至监控管理中心,实现数据可视化,助力管理员全面了解隧道运行期间的有毒气体浓度实时状况,并为…...

2026 本科毕业论文 AI 工具全景指南:从 Paperzz 到高效写作矩阵,一键解锁毕业季从容节奏

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 又到本科毕业季,毕业论文成了无数学生的 “心头大山”:选题卡壳、文献难寻、图表公式无…...

华硕电脑键盘全部失灵

华硕电脑键盘全部失灵前言一、故障排查二、发现问题三、使用方法总结前言 故障情况描述: 键盘无法使用,键盘除开机键外全部失灵,关机后,如果没断电,键盘常亮 打开机器,故障复现,果然是完全失效…...

作为一个普通的程序员,到底应不应该转型AI大模型?

在程序员圈子中,技术转型近年来一直是热门话题。随着AI技术的迅猛发展,优秀人才短缺,程序员向AI大模型转型似乎成为了一条通往职场先机的路径。但是,这条转型之路是否容易走,成功率又如何呢?作为一个普通的…...

Java开发者AI转型大模型全攻略:4大方向+学习路径+避坑指南

本文探讨Java开发者如何在AI时代实现职业转型,提出四个方向:AI增强型工程师、AI工程化、垂直领域AI解决方案、AI产品化。详细阐述各方向目标、实践建议及优势,提供系统学习路径和资源推荐,并给出避免"调参侠"陷阱等实用…...

国内软件工程相关核心期刊汇总与投稿指南

中文核心期刊要目总览收录 1. 软件学报 (顶级期刊) 主办单位:中国科学院软件研究所收录情况:EI、CSCD核心、中文核心影响因子:较高,软件工程领域权威研究方向:软件理论、方法、技术、工具等 2. 计算机研究与发展 主办单…...

# 发散创新:用 Selenium 实现自动化测试的“智能断言”体系构建

发散创新:用 Selenium 实现自动化测试的“智能断言”体系构建 在现代 Web 自动化测试中,Selenium 已成为事实上的标准工具。但大多数开发者仍停留在基础的 find_element click send_keys 模式,缺乏对 断言逻辑 的深入优化和结构化封装。本文…...

记录3天搭建环境成功运行esp32s3的demo,用EIM

1.下载好python(基本没啥问题,也没设置过path之类的,看网上要设置,可能是别的方法)2.看到现在用EIM一键下载的方式后,(以前用大众方法,失败了,这次用别的方法看看)3.想要用EIM,去看b站的视频&am…...

从接口防护到流量风控,企业零漏洞搭建指南

接口防护与流量风控的核心策略接口防护的关键措施 采用HTTPS协议确保数据传输加密,避免中间人攻击。对API接口实施严格的身份验证(如OAuth 2.0、JWT),结合IP白名单限制访问源。输入参数进行合法性校验,防止SQL注入、XS…...

刚刚,Karpathy紧急删库!AI职业末日图爆火,6000万白领岗危了

今天,Karpathy一张图爆火全网:AI真的开始「端掉」饭碗了!全美6000万个岗位告急,年薪10万美金白领成高危人群,最稳的竟是水管工。AI时代的「职场判决书」,6000万人要失业?昨晚,AI大神…...

HIMA F3113A输出放大器模块

HIMA F3113A 输出放大器模块是HIMA安全控制系统中的一种信号输出接口模块,主要用于将控制系统产生的信号进行功率放大,并输出到现场执行设备。该模块具有稳定可靠的输出能力,可确保安全系统在工业环境中的高可靠运行,常用于各类安…...

《Nginx配置文件详解:从结构到参数逐一拆解》

在互联网技术架构中,Nginx凭借其高性能、高并发处理能力,成为Web服务器、反向代理及负载均衡领域的核心组件。无论是静态资源托管、动态请求转发,还是高可用集群搭建,Nginx的配置灵活性直接决定了系统的稳定性和效率。本文将从配置…...

Java SpringBoot+Vue3+MyBatis 私房菜定制上门服务系统系统源码|前后端分离+MySQL数据库

摘要 随着生活节奏的加快和消费升级趋势的增强,个性化定制服务逐渐成为餐饮行业的新方向。私房菜定制上门服务系统旨在满足用户对高品质、个性化餐饮体验的需求,通过线上平台实现厨师与消费者的高效对接。该系统利用互联网技术打破传统餐饮服务的时空限制…...

小白程序员必看:收藏这份Skill进化秘籍,轻松玩转2026大模型Agent!

本文介绍了AutoSkill和XSKILL两篇顶流机构论文的核心观点,指出静态Skill只是高级Prompt,能自我进化的Skill才是真正的数字资产。文章详细解析了AutoSkill的双循环架构和Skill Management决策,以及XSKILL的双流知识架构和协同进化机制。通过真…...

收藏!程序员/小白必看:YouTube最优AI Agent学习渠道,附完整大模型学习路线

不管你是刚入门AI的编程小白,还是想转型AI大模型领域的程序员,都别再盲目找学习资源了!今天给大家整理了6个YouTube宝藏频道,从入门实操到原理深挖,从实战技巧到行业前沿,覆盖AI Agent全学习场景&#xff0…...

Excel 2016版的TextJoin函数为什么不能用?

Excel 2016 版本的 TEXTJOIN 函数不可用,如遭遇“#NAME?”错误提示等,这通常并非源于版本不支持,也不是因为公式语法的误用,而是由具体的更新版本、软件类型或安装状态决定的。该函数作为后期版本引入的特性,对Excel的…...

小白程序员必看:收藏这份 Agent 核心架构指南,轻松应对大模型面试!

本文详细解析了 Agent 的四大核心组件:LLM、工具、记忆和规划模块,通过公司类比和伪代码,帮助读者理解各组件的功能及协作方式。掌握这些关键知识点,收藏本文助你轻松应对大模型面试,提升技术实力! &#x…...

赋能精密制造,驱动设计革新——冰衡咨询携手拓普集团成功举办GDT培训-几何尺寸与公差专题培训

为提升工程技术人员的图纸解读与设计能力,统一设计、制造与检验的语言标准,进一步提升产品质量与装配互换性,拓普集团于2026年3月16日-17日特邀国内知名研发与质量改善培训咨询机构——冰衡咨询,举办了为期两天的“ASME/ISO 几何尺…...

避开这4个选股“死穴”,别再给股市交智商税了

引言:为什么你总是逃不出“被割”的命运?在股市跌宕起伏的浪潮中,很多散户投资者常年陷入一种“西西弗斯式”的困境:每天废寝忘食地复盘、盯盘,付出巨大的精力,结果却是“一买就跌,一卖就涨”。…...

超实用!CAN 总线 CAN 通信中 DBC 文件与 Excel 文件互转工具

CAN总线 CAN通信 dbc文件与excel文件互相转换工具,支持CAN,支持CANFD。 支持J1939。在汽车电子、工业自动化等领域,CAN 总线和 CAN 通信那可是相当重要的存在。CAN 总线就像是汽车电子系统里的“高速公路”,各个电子控制单元&…...

Gemini3Pro全解析及2026最新AI模型对比

Gemini3Pro全解析及2026最新AI模型对比在2026年AI大模型全面向落地转型的当下,很多用户被Gemini3Pro的多模态优势吸引,却被“gemini3pro国内怎么用”“gemini3pro是免费的吗”等问题困扰,而kulaai.cn能一站式解决这些痛点,同时适配…...

go.mod 文件讲解

go.mod 是 Go 1.11 引入的模块管理核心文件,用于定义项目的模块标识、依赖版本、替换规则等,彻底解决了传统 GOPATH 模式下的依赖管理痛点。下面从核心概念、文件结构、常用指令、实操场景四个维度全面讲解。一、核心概念 模块(Module&#x…...

深度脱水:全网吹爆的 OpenClaw 到底好不好用?云端踩坑实录与 MCP 架构反思

最近,各种 Agent 框架在开发者社区火得一塌糊涂,尤其是号称能全面接管即时通讯和本地环境的 OpenClaw,GitHub Star 数狂飙,网上的“保姆级教程”和“惊艳演示”满天飞。但作为真正动手在云端部署并试图将其融入日常工作流的开发者…...

四种自动化测试模型实例及优缺点详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快一、线性测试1.概念:通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。(操作,重复操作&a…...

GPU服务器租用按量计费与包月哪个划算

随着AI大模型训练、推理、科研计算、影视渲染等场景的算力需求常态化,GPU服务器租用已成为企业、科研机构、个人开发者控制算力成本的核心选择。当前市场主流计费模式分为“按量计费”(时租/日租)与“包月计费”,两者在成本、适配…...

CSS object-fit 属性深度解析:掌控图片填充的终极奥秘与实践技巧

还在为CSS图片填充烦恼?本文将带你深入探索object-fit属性,详细解读cover、contain、fill等关键取值的应用场景与效果差异。从响应式布局到电商产品展示,再到用户头像处理,揭示如何根据具体需求灵活运用object-fit,彻底…...

从流媒体转发到智能分析:EasyCVR的视频技术演进

随着数字化转型的深入,传统视频监控系统面临着标准不统一、信息孤岛林立、智能化程度低等痛点。在此背景下,基于云边端一体化架构的EasyCVR视频融合平台应运而生。EasyCVR凭借其强大的协议兼容性、灵活的视频处理能力和AI智能分析扩展性,正在…...

“Java面试必看!Serializable与Externalizable的差别你知道吗?”

文章目录Java面试必看!Serializable与Externalizable的区别你知道吗?前言什么是Serializable?Serializable的使用场景Serializable的优点Serializable的缺点什么是Externalizable?Externalizable的使用场景Externalizable的优点Ex…...

高并发异步日志系统设计实战

异步日志系统的设计与实现 日志系统是软件开发中不可或缺的组成部分,用于记录程序运行时的关键信息。在高并发或高性能场景下,同步日志系统可能成为性能瓶颈。异步日志系统通过解耦日志记录与写入操作,显著提升系统吞吐量。 异步日志的核心思…...