SQL编码规范及技巧(附带案例)—如何编写简单性能又高的SQL语句

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

SQL编码规范及技巧(附带案例)—如何编写简单性能又高的SQL语句

规范化的SQL代码,能够提高代码的执行效率、可读性、可维护性和一致性。
简洁而高效的SQL才性能优化大师所追求的。
一个又一个的子查询,视图又嵌套视图是性能优化中应该尽量避免的。
那么如何编写高效的SQL代码呢?
请查看下面的编码规范


1.SQL要尽量简单,关联的表越少越好,最好不超过三个,尽量避免复杂的多表关联,难以优化,随着数据量的增加性能的风险很大;


2.避免写过于复杂的SQL,不要用一条复杂的SQL就把功能做出来,能拆分成多个简单的,就要拆分成多个简单的SQL。


3.合理使用临时表, 子查询复杂的,尽量把子查询写成临时表    特别是left join后面跟复杂子查询,    或连接复杂子查询后,又跟其它表连接,要把子查询写成临时表


4.VT表不是真正的临时表,频繁的创建和往VT表插入数据,会引起很多硬解析,同时会导致数据库内部字典做大量的DML操作,引起严重latch 争用,或者触发Oracle bug(Oracle会有这种问题)


5.我们尽量从业务层面去多考虑,复杂的SQL“替”Oracle或SQLServer优化器选择使用哪张表做驱动表。 Left join 要尽量提前过滤掉数据,保持前面查询到的结果集瘦小。有时候并非真的要left join 才能达到目的,有可能inner join就可以达成,而inner join的效率通常要高很多,而且一般不需要关注驱动表是哪一张表

6.在不影响业务的前提下尽量减小事务的粒度,尽量及时commit,避免阻塞

7.没有把握的情况下,不要使用hints提示,在一个客户上使用是正确的,在另一个客户未必是对的,因为数据分布和查询条件可能会完全不同,可能会走差的执行计划,方法是让Oracle自己选择执行计划

8.严禁视图中再引用其它视图,视图再引用视图性能绝大多数情况下性能非常差,后期几乎无法维护和优化,需要的数据要根据业务来从基表中取

9.在Oracle中,With as 这种临时表有不少情况是会走错执行计划,性能一般情况下不如VT表,但它优点是可以让硬解析更少


10.注意表关联字段的字符类型,避免类型不一致导致的全表扫描(比如Oracle中的nvarchar与varchar的字段)



了解了这些编码规范后,那如何编写更效的SQL呢,有什么技巧?

请看附件:


SQL开发技巧.docx


学完这个,有没有案例可以参考呢?

有的,请看附件:

SQL语句调优方法和案例.docx




SQL编码规范及技巧(附带案例)—如何编写简单性能又高的SQL语句

规范化的SQL代码,能够提高代码的执行效率、可读性、可维护性和一致性。简洁而高效的SQL才性能优化大师所追求的。一个又一个的子查询,视图...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息