程序员现在还用Select *嘛

news/2024/5/18 23:55:57 标签: 程序员, 数据库, SQL, DBA, 硬件

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

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

<a class=程序员现在还用Select *嘛" class="has" src="https://imgconvert.csdnimg.cn/aHR0cDovL3AzLnBzdGF0cC5jb20vbGFyZ2UvcGdjLWltYWdlLzM1YzdmNzQ4YTQ0ZDQ4NDA4MmViNGEwNWRmMDQ4M2Uw?x-oss-process=image/format,png" />

 

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

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

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

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

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

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

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

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

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

<a class=程序员现在还用Select *嘛" class="has" src="https://imgconvert.csdnimg.cn/aHR0cDovL3AxLnBzdGF0cC5jb20vbGFyZ2UvcGdjLWltYWdlLzM2OTk2NzZkN2Y5YzQ1ZDk5YjA3M2Q5ZjA4YTUwMGYy?x-oss-process=image/format,png" />

 

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

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

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

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

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

<a class=程序员现在还用Select *嘛" class="has" src="https://imgconvert.csdnimg.cn/aHR0cDovL3AzLnBzdGF0cC5jb20vbGFyZ2UvcGdjLWltYWdlLzg0MzYxMjIyMTQ5NDQ3YTA5OGEzNGJhYjJmMTEwMTQx?x-oss-process=image/format,png" />

 

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

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

如果不查询表中所有的列,尽量避免使用 SELECT *,因为它会进行全表扫描,不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间的网络IO开销。

<a class=程序员现在还用Select *嘛" class="has" src="https://imgconvert.csdnimg.cn/aHR0cDovL3A5LnBzdGF0cC5jb20vbGFyZ2UvcGdjLWltYWdlL2UwNzQ5MzEwZTJiZTQ2NzJhZmRhYTNhZmMzY2ZlNzll?x-oss-process=image/format,png" />

 

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

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

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

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

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

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

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

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

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

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

其他

SQL调优方法有很多种,同样的查询结果可以有很多种不同的查询方式。其实最好的方法就是在开发环境中用最贴近真实的数据集和硬件环境进行测试,然后再发布到生产环境中。

关注我了解更多架构知识,领取丰富架构资料。


http://www.niftyadmin.cn/n/1667578.html

相关文章

oracle 体系结构及内存管理 04_字符集

2019独角兽企业重金招聘Python工程师标准>>> 1、不同OS客户端字符集查看与设置&#xff1a; windows: cmd->chcp #查看&#xff1a;936就是中文字符集 GBK&#xff0c;不用设置&#xff1b; cmd->echo %NLS_LANG% #查看NLS_LANG设置&#xff1b; …

阿里云负载均衡实例,关联多台后端ECS

阿里云负载均衡实例&#xff0c;关联多台后端ECS 阿里云负载均衡实例&#xff0c;关联多台后端ECS&#xff1a;请求的转发到不同的服务器。&#xff08;轮询&#xff0c;权重等&#xff09;https://help.aliyun.com/document_detail/27552.html?spm5176.doc27547.2.8.aJgloC …

apicloud,aliyunlive,测试成功

1.推流 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0"><ti…

Java设计模式之命令模式(Command Pattern)

目录 定义 使用场景 定义 Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations. &#xff08;将一个请求封装成一个对象&#xff0c;从而让你使用不同的请求把客户端…

Java Atomic总结

所谓 Atomic&#xff0c;翻译过来就是原子。原子被认为是操作中最小的单位&#xff0c;一段代码如果是原子的&#xff0c;则表示这段代码在执行过程中&#xff0c;要么执行成功&#xff0c;要么执行失败。原子操作一般都是底层通过 CPU 的指令来实现。而 atomic 包下的这些类&a…

Using python-keystoneclient.v3 API

为什么80%的码农都做不了架构师&#xff1f;>>> http://docs.openstack.org/developer/python-keystoneclient/using-api-v3.html >>> from keystoneclient import client >>> auth_url http://localhost:5000 >>> username adminUse…

阿里云弹性伸缩

https://help.aliyun.com/document_detail/25866.html?spm5176.doc25857.6.548.Ow9TBU 配合负载均衡&#xff0c;预先配置ECS 加入和取消。疑问&#xff1a;ECS镜像是系统盘吧&#xff1f;那么系统盘的话其他文件数据是自动同步的么&#xff1f;

NOIP2018提高组初赛游记

AH省的&#xff0c;好像水军多&#xff0c;走的都比较早&#xff08;莫非是真大佬&#xff01;&#xff01;&#xff09; 本人考了71&#xff0c;较去年退步了。&#xff08;去年还考80多的来着&#xff09; 题目坑。。 第一、二大题选择 第三题年份&#xff0c;看了试卷标题&a…