性能测试:数据库的 SQL 性能优化实战
做过性能测试的同学都应该知道性能测试核心就是结果分析和性能瓶颈调优然后性能的瓶颈70%-80%的问题都是来自于数据库。所以掌握数据库的瓶颈分析对其性能测试工程师来说尤为重要。数据库的性能优化数据库的性能优化可以从硬件和软件两个层面来考虑1硬件方面主要就是磁盘选择考虑磁盘的读写速度、消耗IO【读入 写出】性能所以尽量选择固态硬盘【速度比机械硬盘高但是价格贵】并使用独立服务器跟业务服务器分开。数据库服务器的存储操作大于计算操作所以关注磁盘会更多一些但是CPU的影响也会有比如sql复杂一些的时候也会消耗CPU所以同步关注CPU硬件的优化因为主要涉及设备配件的选型和购买所以性能测试能做的性能优化有限2软件方面我们做数据库的性能优化主要是这个层面的优化 数据库层面优化 表层面优化库层面MYSQL数据库的配置参数会影响数据库的一些性能比如最大连接数表层面主要是索引字段的设置优化和SQL的优化。我们这篇文章主要讲一下表层面的SQL性能优化。SQL语句性能优化数据库SQL性能优化是提升数据库运行效率的关键环节以下是一些具体的注意点并结合案例进行演示和说明帮助大家理解。1、避免使用SELECT *使用SELECT *会检索表中的所有列会导致不必要的数据传输和内存消耗如果数据库和项目是两台独立的服务器的话还会增加网络传输的负载。所以尽量查询具体的列比如SQL样例* --优化前select * from user where id1 * --优化后select name,age from user where id 1;2. 使用JOIN代替子查询子查询通常会导致数据库执行多次表扫描会增加I/O开销和查询执行时间使用JOIN操作将多个查询合并为一个查询可以更好地利用索引和减少表扫描次数比如SQL样例-- 优化前子查询 SELECT * FROM orders WHERE user_id (SELECT user_id FROM users WHERE username john_doe); -- 优化后JOIN SELECT o.* FROM orders o JOIN users u ON o.user_id u.user_id WHERE u.username john_doe;3. 避免使用OR使用UNION或UNION ALL代替在WHERE子句中使用OR条件可能会导致数据库无法使用索引从而增加全表扫描的机会。使用UNION ALL将多个查询结果合并每个查询都可以单独使用索引进行优化从而减少全表扫描的机会。比如SQL样例* -- 优化前使用ORSELECT * FROM users WHERE age 30 OR city New York; * -- 优化后使用UNION ALL SELECT * FROM users WHERE age 30 UNION ALL SELECT * FROM users WHERE city New York;注意使用UNION ALL时需要确保结果集中不包含重复数据或者重复数据对业务逻辑没有影响。4. 避免在WHERE子句中使用函数在WHERE子句中使用函数会导致数据库无法使用索引来加速查询。将函数计算移到列外直接使用列值进行判断这样数据库可以利用索引来加速查询避免全表扫描。比如SQL样例-- 优化前使用函数 SELECT * FROM users WHERE SUBSTRING(username, 1, 3) joh; -- 优化后不使用函数 SELECT * FROM users WHERE username LIKE joh%;5、使用LIMIT限制结果集大小如果查询返回的结果集过大会消耗大量的内存和I/O资源。使用LIMIT语句限制结果集的大小可以减少数据库的负担并提高查询性能。比如SQL样例– 优化前无LIMIT SELECT id,name FROM products;– 优化后使用LIMIT SELECT id,name FROM products LIMIT 100;6、选择合理的字段类型字段类型选择不当会导致数据存储效率低下和查询性能下降。例如使用VARCHAR类型存储数字数据会浪费存储空间并降低查询速度。所以根据业务需求选择最合适的字段类型。例如对于数字数据应使用INT、FLOAT或DECIMAL等数字类型对于文本数据应使用VARCHAR或TEXT等字符串类型。这样可以提高存储效率和查询性能。SQL案例使用数字类型代替字符串类型如果适用– 优化前使用VARCHARCREATE TABLE example (id VARCHAR(10), value VARCHAR(100));– 优化后使用INTCREATE TABLE example (id INT, value VARCHAR(100));7、使用索引索引是提高SQL查询性能的关键。没有索引的表在查询时需要执行全表扫描来查找数据这会导致查询性能下降。在常用的查询条件和连接条件的列上建立索引。索引可以加快查询速度并减少全表扫描的机会。同时要注意索引的维护成本避免创建过多的索引导致插入、更新和删除操作的性能下降。例如SQL语句– 在user_id列上创建索引 CREATE INDEX idx_user_id ON users(user_id);– 使用索引进行查询 SELECT * FROM users WHERE user_id 123;8、避免全表扫描优化方式通过合理的索引设计和查询条件避免全表扫描。– 避免在没有索引的列上进行范围查询– 优化前可能导致全表扫描SELECT * FROM products WHERE price 100;– 优化后在price列上创建索引CREATE INDEX idx_price ON products(price);SELECT * FROM products WHERE price 100;总结所以在做性能测试的时候如果发现数据库占的CPU比较高或者响应时间比较长都可以去检查一下 数据库是否存在上述的SQL问题从而来优化项目的数据库的性能。感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

相关新闻

Python unittest:自动化测试保姆级指南

Python unittest:自动化测试保姆级指南

在现代软件开发中,自动化测试已成为提高产品质量和开发效率的关键工具。作为Python内置的单元测试框架,unittest因其简单易用和功能强大,成为初学者快速上手测试工作的理想选择。本文将为您提供一份保姆级教程,带您从零开始掌握un…

2026/7/9 11:13:01 阅读更多 →
经验: Linux系统压力测试工具(命令行工具)

经验: Linux系统压力测试工具(命令行工具)

Linux的命令行压力测试工具在做基准测试时很有用,通过基准测试对了解一个系统所能达到的最大性能指标,这些指标可以作为后续性能比较、优化评估的参考依据。 模拟CPU压力: 可以使用stress命令使CPU处于高负载状态。例如,通过str…

2026/7/6 22:26:41 阅读更多 →
Linux实用技巧:如何安全地添加一个开机运行脚本

Linux实用技巧:如何安全地添加一个开机运行脚本

Linux实用技巧:如何安全地添加一个开机运行脚本 在日常运维和开发中,我们经常需要让某些自定义脚本在系统启动时自动运行——比如初始化环境变量、启动监控服务、挂载网络存储、或执行健康检查。但“能跑起来”不等于“跑得安全”,一个未经审…

2026/7/3 22:29:21 阅读更多 →

最新新闻

NVIDIA隐藏参数调优指南:深度解锁显卡性能的完整教程

NVIDIA隐藏参数调优指南:深度解锁显卡性能的完整教程

NVIDIA隐藏参数调优指南:深度解锁显卡性能的完整教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾对显卡驱动中那些灰色不可调的选项感到好奇?当游戏帧率波动、画面细…

2026/7/9 19:46:26 阅读更多 →
终极Unity游戏Mod加载指南:MelonLoader让你的游戏体验焕然一新

终极Unity游戏Mod加载指南:MelonLoader让你的游戏体验焕然一新

终极Unity游戏Mod加载指南:MelonLoader让你的游戏体验焕然一新 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 想要…

2026/7/9 19:46:26 阅读更多 →
RePKG:逆向工程的艺术与Wallpaper Engine资源解构实战

RePKG:逆向工程的艺术与Wallpaper Engine资源解构实战

RePKG:逆向工程的艺术与Wallpaper Engine资源解构实战 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 在游戏和数字内容创作领域,资源包格式往往是技术壁垒的…

2026/7/9 19:46:26 阅读更多 →
碧蓝航线自动化脚本终极指南:5个技巧实现无缝委托科研与全自动大世界

碧蓝航线自动化脚本终极指南:5个技巧实现无缝委托科研与全自动大世界

碧蓝航线自动化脚本终极指南:5个技巧实现无缝委托科研与全自动大世界 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript …

2026/7/9 19:44:25 阅读更多 →
无人机视角智慧交通道路路面井盖异常丢失破损未盖好检测数据集VOC+YOLO格式851张3类别

无人机视角智慧交通道路路面井盖异常丢失破损未盖好检测数据集VOC+YOLO格式851张3类别

注意数据集为合成图片,具体看图片数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):851标注数量(xml文件个数):851标注数…

2026/7/9 19:42:24 阅读更多 →
ESP8266 ESP-01S 继电器模块 3 种供电方案对比:5V USB、12V 适配器与 220V 直连

ESP8266 ESP-01S 继电器模块 3 种供电方案对比:5V USB、12V 适配器与 220V 直连

ESP8266 ESP-01S 继电器模块供电方案深度解析:5V USB、12V 适配器与 220V 直连的工程实践1. 供电方案的技术背景与核心挑战在物联网设备开发中,ESP8266 ESP-01S因其紧凑尺寸和Wi-Fi功能成为继电器控制的理想选择。但供电问题常被开发者忽视,不…

2026/7/9 19:38:23 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻