你还在 Select * 吗?

阅读本文大概须要 1.6 分钟。程序员

做者: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调优方法有不少种,一样的查询结果能够有不少种不一样的查询方式。其实最好的方法就是在开发环境中用最贴近真实的数据集和硬件环境进行测试,而后再发布到生产环境中。

 

 

·END·

程序员的成长之路

路虽远,行则必至

本文原发于 同名微信公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。

微信ID:cxydczzl

 

往期精彩回顾

相关文章
相关标签/搜索