SQL编码中注意的性能问题

网友投稿 558 2022-10-27

SQL编码中注意的性能问题

SQL编码中注意的性能问题

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语句尽量简单 不要频繁更新有触发器的表的数据 注意数据库函数的限制以及其性能

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Sworm - 基于Swoole的异步MySQL数据库ORM框架
下一篇:WebClient抛UnsupportedMediaTypeException异常解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~