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