当前位置: 首页 > 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.lqws.cn/news/587305.html

相关文章:

  • FastAPI 学习(二)
  • 在Flutter中生成App Bundle并上架Google Play
  • android BottomSheet及AlertDialog的几种material3 常见ui的用法
  • WSL/Linux 常用命令速查
  • Windows 11 安装 Linux 系统详细教程
  • docker安装RabbitMQ,创建RabbitMQ容器以及docker-compose.yml配置
  • 博图SCL编程:结构体(STRUCT)使用详解与实战案例
  • 英国研究团队启动合成完整人类基因组的前沿项目
  • 解决VSCode打开最近项目后终端shell不正常的问题
  • 数据结构入门-图的基本概念与存储结构
  • 数据结构与算法分析课设:一元多项式求值
  • STM32-第一节-新建工程,GPIO,点亮LED,蜂鸣器
  • 零成本接入+企业级部署:2025年AI大模型实战指南
  • 某只股票量化对冲策略计算绘图
  • 利用不坑盒子的Copilot,快速排值班表
  • JSON-LD 开发手册
  • 探索 AI 系统提示与模型资源库:`system-prompts-and-models-of-ai-tools`
  • 门控循环单元(GRU):LSTM 的轻量级高效 “记忆专家”
  • Android Liunx ffmpeg交叉编译
  • 自己电脑搭建本地服务器并实现公网访问,内网也能提供互联网连接使用
  • 零基础学土壤物理建模|Hydrus2D、Hydrus3D实操教程+参数设置技巧
  • 【算法】动态规划 70: 爬楼梯
  • ue xr 系统
  • 飞算 JavaAI 深度实战:从老项目重构到全栈开发的降本增效密码
  • 【Spring AI】 1接入 Ollama实践
  • 周赛98补题
  • C/C++ 使用rapidjson库 操作Json格式文件(创建、插入、解析、修改、删除)
  • 【数论 构造】 P11036 【MX-X3-T3】「RiOI-4」GCD 与 LCM 问题|普及+
  • 高效读取文件中指定行段的两种方法
  • mysql运维语句