SQL编码中注意的性能问题-阿里云开发者社区

开发者社区> jiankunking> 正文

SQL编码中注意的性能问题

简介: 1、选择合适的数据类型 为列选择最小化的数据类型 如果一列中的文本长度不一,使用VARCHAR而不是CHAR 不存储Unicode不要使用NVARCHAR或者NCHAR 如果一行的长度不超过8000,使用VARCHAR而不是TEXT 对于仅存数字的列要使用数字类型而不要用字符类型 不要使用字符串类型存储日期数据。2、谨慎使用触发器 保持触发器内的代码最小化 可能的情况下尽量
+关注继续查看
1、选择合适的数据类型
为列选择最小化的数据类型
如果一列中的文本长度不一,使用VARCHAR而不是CHAR
不存储Unicode不要使用NVARCHAR或者NCHAR
如果一行的长度不超过8000,使用VARCHAR而不是TEXT
对于仅存数字的列要使用数字类型而不要用字符类型
不要使用字符串类型存储日期数据。
2、谨慎使用触发器
保持触发器内的代码最小化
可能的情况下尽量用其他更高效的技术替代触发器
尽量避免回滚触发器
3、只返回需要的数据
横向来看,不要返回自己不需要的列,尽量不要使用select *
纵向来看,不要返回自己不需要的行,尽量使用where条件来过滤自己需要的内容
考虑使用TOP
考虑分页
对于聚合查询,可以用HAVING子句进一步限定返回的行。
4、尽量少做重复的工作
控制同一语句的多次执行,特别是一些基础数据的多次执行。
减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是可以做到的。
合并对同一表同一条件的多次UPDATE,
UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。
不要写一些没有意义的查询。
插入大量数据时,尽量不要使用循环,可以使用CTE,如果要使用循环,也放到一个事务中;
5、注意临时表用法
在复杂系统中,临时表很难避免,关于临时表需要注意:
语句很复杂,连接太多,可以考虑用临时表分步完成。
多次用到一个大表的同一部分数据,考虑用临时表暂存数据。
需要综合多个表的数据,形成一个结果,可以考虑用临时表分步汇总这多个表的数据。
其他情况下,应该控制临时表和表变量的使用。
注意排序规则。
关于临时表产生使用SELECT INTO和CREATE TABLE + INSERT INTO的选择.
6、避免使用游标
对于某些逐行的处理考虑放在客户端
考虑使用关联的子查询代替游标
必须使用游标时注意以下问题:
使用高效的游标类型(例如 forward-only)
使用服务器端游标时保持结果集尽量小。
游标使用结束时不能仅仅CLOSE,还要DEALLOCATE。
7、 恰当使用连接
对于频繁连接的表用于连接的列需要有合适的索引
用于连接的列尽量使用相同的数据类型
避免将唯一值很少的列用过连接列,否则会导致scan
如果有些查询需要对4个或更多的表进行连接,可以考虑低范化一些表
8、 其他需要注意的地方
问题发现的越早解决的成本越低,很多性能问题可以在编码阶段就发现,为了提早发现性能问题,需要注意:
程序员注意、关心各表的数据量。
编码过程和单元测试过程尽量用数据量较大的数据库测试,最好能用实际数据测试。
每个SQL语句尽量简单
不要频繁更新有触发器的表的数据
注意数据库函数的限制以及其性能

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL编码中注意的性能问题
1、选择合适的数据类型 为列选择最小化的数据类型 如果一列中的文本长度不一,使用VARCHAR而不是CHAR 不存储Unicode不要使用NVARCHAR或者NCHAR 如果一行的长度不超过8000,使用VARCHAR而不是TEXT 对于仅存数字的列要使用数字类型而不要用字符类型 不要使用字符串类型存储日期数据。2、谨慎使用触发器 保持触发器内的代码最小化 可能的情况下尽量
966 0
char,Character,int,字符及编码日记
char,Character,int,字符及编码日记 public class Test { public static void main(String[] args) { char c = 'a'; Character ch = new Characte...
999 0
RDS for MySQL 字符序(collation)引发的性能问题
经常会遇到的 RDS 实例性能问题(比如 RDS 实例 CPU 使用率高),而其中有一类是由于字符集的字符排序规则不一致导致的。这类问题如何定位,如何解决?田杰带你来解决这类问题哦。
7286 0
18 个命令&工具帮你定位 Linux 性能问题
1.TopTop命令是一个性能监控程序,它按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果。这条命令显示了CPU的使用率、内存使用率、交换内存使用大小、高速缓存使用大小、缓冲区使用大小,进程PID、所使用命令以及其他。
1139 0
page fault带来的性能问题
Linux进程如何访问内存 Linux下,进程并不是直接访问物理内存,而是通过内存管理单元(MMU)来访问内存资源。原因后面会讲到。 为什么需要虚拟内存地址空间 假设某个进程需要4MB的空间,内存假设是1MB的,如果进程直接使用物理地址,这个进程会因为内存不足跑不起来。既然进程不是直接访问
18762 0
IOS使用CFURLCreateStringByAddingPercentEscapes进行URL编码
<p style="border-width:0px; padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:8px; list-style:none; text-indent:2em; color:rgb(51,51,51); font-family:宋体; font-size:14px; line-heig
1208 0
linux centos 被攻击乱码 将字符编码设置为中文
linux centos mysql 漏洞导致centos 被执行恶意命令
78 0
《SQL与关系数据库理论——如何编写健壮的SQL代码》一一1.5 模型vs.实现
本节书摘来华章计算机《交互式程序设计 第2版》一书中的第1章 ,第1.5节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.5 模型vs.实现 在继续深入之前,有必要对一点进行解释,因为此点是本书所有讨论内容的基础。
837 0
+关注
726
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载