博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
除了不要 SELECT * ,程序员使用数据库还应知道的11个技巧!
阅读量:3922 次
发布时间:2019-05-23

本文共 1199 字,大约阅读时间需要 3 分钟。

公众号后台回复“学习”,获取作者独家秘制精品资料

640?wx_fmt=png

640?wx_fmt=jpeg

扫描下方海报二维码,试听课程:

640?wx_fmt=jpeg

640?wx_fmt=png

本文来源:AIOps

应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。

那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系。640?wx_fmt=jpeg

程序中嵌入的一行行的SQL语句,如果使用了一些优化小技巧,定能达到事半功倍的效果。

技巧1 比较运算符能用 “=”就不用“<>”

“=”增加了索引的使用几率。

技巧2 明知只有一条查询结果,那请使用 “LIMIT 1”

“LIMIT 1”可以避免全表扫描,找到对应结果就不会再继续扫描了。

技巧3 为列选择合适的数据类型

能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,道理你懂的,磁盘和内存消耗越小越好嘛。

技巧4 将大的DELETE,UPDATE or INSERT 查询变成多个小查询

能写一个几十行、几百行的SQL语句是不是显得逼格很高?然而,为了达到更好的性能以及更好的数据控制,你可以将他们变成多个小查询。

640?wx_fmt=jpeg

技巧5 使用UNION ALL 代替 UNION,如果结果集允许重复的话

因为 UNION ALL 不去重,效率高于 UNION。

技巧6 为获得相同结果集的多次执行,请保持SQL语句前后一致

这样做的目的是为了充分利用查询缓冲。

比如根据地域和产品id查询产品价格,第一次使用了:

640?wx_fmt=png

img

那么第二次同样的查询,请保持以上语句的一致性,比如不要将where语句里面的id和region位置调换顺序。

技巧7 尽量避免使用 “SELECT *”

如果不查询表中所有的列,尽量避免使用 SELECT *

因为它会进行全表扫描,不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间的网络IO开销。

640?wx_fmt=jpeg

img

技巧8 WHERE 子句里面的列尽量被索引

只是“尽量”哦,并不是说所有的列。因地制宜,根据实际情况进行调整,因为有时索引太多也会降低性能。

技巧9 JOIN 子句里面的列尽量被索引

同样只是“尽量”哦,并不是说所有的列。

技巧10 ORDER BY 的列尽量被索引

ORDER BY的列如果被索引,性能也会更好。

技巧11 使用 LIMIT 实现分页逻辑

不仅提高了性能,同时减少了不必要的数据库和应用间的网络传输。

技巧12 使用 EXPLAIN 关键字去查看执行计划

EXPLAIN 可以检查索引使用情况以及扫描的行。

其他

SQL调优方法有很多种,同样的查询结果可以有很多种不同的查询方式。

其实最好的方法就是在开发环境中用最贴近真实的数据集和硬件环境进行测试,然后再发布到生产环境中。

END

如有收获,请划至底部,点击“在看”,谢

640?wx_fmt=png

欢迎长按下图关注公众号石杉的架构笔记

640?wx_fmt=jpeg

BAT架构经验倾囊相授

转载地址:http://rxern.baihongyu.com/

你可能感兴趣的文章
source、sh、bash、./执行脚本的区别
查看>>
centos7安装Apache虚拟主机
查看>>
Job for network.service failed
查看>>
在同一个网络接口上绑定多个IP
查看>>
TreeMap源码分析(基于jdk1.8)
查看>>
中介者模式
查看>>
全面理解java内存模型
查看>>
访问者模式
查看>>
设计模式之适配器模式
查看>>
面试官:手写一个选择排序并对其改进(java实现)
查看>>
面试官:如何在十亿个单词字典中,判断某个单词是否存在?(布隆过滤器)
查看>>
java远程调用之RMI(终于可以自己写代码控制别人电脑了)
查看>>
Shiro安全框架(1)基础入门案例和原理
查看>>
8、聊聊java中的进制问题
查看>>
这篇java的NIO编程,保证你能看懂
查看>>
面试官:手写一个冒泡排序,并对其改进(java实现)
查看>>
java中的对称加密算法
查看>>
面试官:手写一个插入排序,并对其改进
查看>>
面试官:手写一个快速排序,并对其改进
查看>>
Hashtable源码分析(基于jdk1.8,推荐)
查看>>