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语句尽量简单
不要频繁更新有触发器的表的数据
注意数据库函数的限制以及其性能
目录
相关文章
|
4月前
|
SQL 数据采集 数据管理
SQL数据:探索、管理与优化的全面解析
在信息化时代,数据成为企业核心资产。本文探讨SQL在数据探索、管理与优化中的作用:使用DESC、SELECT了解数据集;评估数据质量;发现数据特征。管理方面,涵盖数据存储、检索、更新与维护。优化则涉及索引、查询及数据库设计,确保高性能和效率。掌握SQL能有效挖掘数据价值,支持企业决策与创新。
96 1
|
4月前
|
SQL 测试技术 数据库
【SQL】已解决:SQL错误(15048): 数据兼容级别有效值为100、110或120
【SQL】已解决:SQL错误(15048): 数据兼容级别有效值为100、110或120
89 0
|
SQL 数据库 数据库管理
SQL的优点
SQL的优点
63 0
|
SQL 算法 关系型数据库
sql调优之:字符集不一致导致的索引失效案例
生产上有一段sql,大概几百行,做的是inser into …select ;的操作,但是执行了一个多小时都出不来,正常情况下不会这么久,通过一步步定位,最后发现是其中某一段的join 特别慢导致的,后面对这段sql重点分析发现,这里的表竟然没有走索引,对于几十万以上的表之间的连接,若是没有索引那就是灾难性的,加不加索引就好比一个人力三轮与超跑的区别。
619 0
sql调优之:字符集不一致导致的索引失效案例
|
SQL 索引
SQL Server 并行操作优化,避免并行操作被抑制而影响SQL的执行效率
原文:SQL Server 并行操作优化,避免并行操作被抑制而影响SQL的执行效率   为什么我也要说SQL Server的并行: 这几天园子里写关于SQL Server并行的文章很多,不管怎么样,都让人对并行操作有了更深刻的认识。
1165 0
|
SQL 关系型数据库 C#
SQL Serever学习17——数据库的分析和设计
数据库的分析和设计 设计数据库确定一个合适的数据模型,满足3个要求: 符合用户需求,包含用户所需的所有数据 能被数据库管理系统实现,如sqlserver,oracle,db2 具有比较高质量,容易理解,使用方便,便于维护,效率高 设计步骤分为6步: 需求分析,与用户沟通,达成统一意见 概念结构...
1248 0
|
SQL 索引 关系型数据库
下一篇
无影云桌面