当前位置: 首页 > news >正文

SQL规范

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

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

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

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

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


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

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

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

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

注意表关联字段的字符类型,避免类型不一致导致的全表扫描,特别是nvarchar与varchar的字段

http://www.xdnf.cn/news/1075951.html

相关文章:

  • IDEA相关配置记录
  • 【中文核心期刊推荐】《计算机应用与软件》
  • Windows CMD命令分类大全
  • 前端开发面试题总结-原生小程序部分
  • 衡石科技使用手册-企业即时通讯工具数据问答机器人用户手册
  • STM32要学到什么程度才算合格?
  • 华为云Flexus+DeepSeek征文|基于 Dify-LLM 构建网站智能客服助手的实践探索
  • Go语言安装使用教程
  • C++ 快速回顾(五)
  • Python 数据分析与机器学习入门 (二):NumPy 核心教程,玩转多维数组
  • 湖北理元理律师事务所债务解法:从法律技术到生活重建
  • 长短期记忆网络(LSTM):让神经网络拥有 “持久记忆力” 的神奇魔法
  • 安装bcolz包报错Cython.Compiler.Errors.CompileError: bcolz/carray_ext.pyx的解决方法
  • JavaScript异步编程的五种方式
  • 反射,枚举和lambda表达式
  • 七天学会SpringCloud分布式微服务——06——Sentinel
  • springboot中多个定时任务(@Scheduled)如何互不影响
  • 如何用废弃电脑变成服务器搭建web网站(公网访问零成本)
  • OpenCV CUDA模块设备层----- 正切(tangent)运算函数tan()
  • CSDN博客大搬家(本地下载markdown合适和图片本地化)
  • 关于 java:8. Java 内存模型与 JVM 基础
  • 基础算法合集-图论
  • 字节跳动 C++ QT PC客户端面试
  • Bessel位势方程求解步骤
  • OpenCV计算机视觉实战(14)——直方图均衡化
  • AutoCAD Electrical 2009无法激活
  • 通过python+openCV实现对图片中箭头方向的判断
  • 【Java面试】10GB,1GB内存,如何排序?
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 「Java案例」计算矩形面积