你还在 Select * 吗?
作者:AIOps
应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。
那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系。
程序中嵌入的一行行的SQL语句,如果使用了一些优化小技巧,定能达到事半功倍的效果。
技巧1 比较运算符能用 “=”就不用“<>”
“=”增加了索引的使用几率。
技巧2 明知只有一条查询结果,那请使用 “LIMIT 1”
“LIMIT 1”可以避免全表扫描,找到对应结果就不会再继续扫描了。
技巧3 为列选择合适的数据类型
能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,道理你懂的,磁盘和内存消耗越小越好嘛。
技巧4 将大的DELETE,UPDATE or INSERT 查询变成多个小查询
能写一个几十行、几百行的SQL语句是不是显得逼格很高?然而,为了达到更好的性能以及更好的数据控制,你可以将他们变成多个小查询。
技巧5 使用UNION ALL 代替 UNION,如果结果集允许重复的话
因为 UNION ALL 不去重,效率高于 UNION。
技巧6 为获得相同结果集的多次执行,请保持SQL语句前后一致
这样做的目的是为了充分利用查询缓冲。
比如根据地域和产品id查询产品价格,第一次使用了:
那么第二次同样的查询,请保持以上语句的一致性,比如不要将where语句里面的id和region位置调换顺序。
技巧7 尽量避免使用 “SELECT *”
如果不查询表中所有的列,尽量避免使用 SELECT *,因为它会进行全表扫描,不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间的网络IO开销。
技巧8 WHERE 子句里面的列尽量被索引
只是“尽量”哦,并不是说所有的列。因地制宜,根据实际情况进行调整,因为有时索引太多也会降低性能。
技巧9 JOIN 子句里面的列尽量被索引
同样只是“尽量”哦,并不是说所有的列。
技巧10 ORDER BY 的列尽量被索引
ORDER BY的列如果被索引,性能也会更好。
技巧11 使用 LIMIT 实现分页逻辑
不仅提高了性能,同时减少了不必要的数据库和应用间的网络传输。
技巧12 使用 EXPLAIN 关键字去查看执行计划
EXPLAIN 可以检查索引使用情况以及扫描的行。
其他
SQL调优方法有很多种,同样的查询结果可以有很多种不同的查询方式。其实最好的方法就是在开发环境中用最贴近真实的数据集和硬件环境进行测试,然后再发布到生产环境中。
在微信公众号后台回复关键字: 数据库 (为防止出错: 强烈建议直接复制关键字到后台回复)获取Mysql和Oracle完整版视频合集讲解资源
欢迎关注我的微信公众号:"Java大数据修炼之道"(一个有温度、有情怀且用心的微信公众号,无广告,单纯技术分享,期待与你共同进步~~~,分享美文,分享各种Java学习资源。)
最近干货分享
推荐学习路线:
1、Java学习求职路线(资料、视频、源码、项目实战)
2 、java项目20套 +完整版java学习视频
推荐面试技巧:
推荐阅读:
看完本文有收获?请转发分享给更多人
关注「java大数据修炼之道」,提升Java技能
小编个人微信
(如果你有学习上不懂的问题、需要学习视频资源等;都可长按识别上方二维码添加小编为好友, 我将免费为你提供完整的学习路线和各种视频学习资源)
如果您觉得不错,请别忘了转发、分享、点赞让更多的人去学习, 您的举手之劳,就是对小编最好的支持,非常感谢!
如何您想进技术群交流,关注公众号在后台回复 “加群”,或者 “学习” 即可
著作权归作者所有,欢迎大家投稿 (投稿作者我会在公众号一一署名一 一并感谢
看完本文有收获?请转发分享给更多有需要的人
喜欢就点击下“在看”呗~
如果你觉得文章不错,欢迎点赞分享到朋友圈
本公众号已永久关闭赞赏功能! 所有资源均免费 , 纯属公益分享 ,
您的一个分享和转发就是对我莫大的支持 !