当前位置: 首页 > 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.dtcms.com/a/263327.html

相关文章:

  • 【软考高项论文】论信息系统项目的范围管理
  • 剑指offer51_数组中数值和下标相等的元素
  • 机器人仿真(1)Ubuntu24.04下CLion的ROS2开发环境配置
  • [ C++ ] | unordered_map 底层实现原理
  • Linux-进程概念(1)
  • 亚马逊,塔吉特采购,测评防砍单封号的养号下单黄金法则
  • 华为云Flexus+DeepSeek征文 | Word办公软件接入华为云ModelArts Studio大模型,实现AI智能办公
  • 【C++指南】C++ list容器完全解读(三):list迭代器的实现与优化
  • Deploy StarRocks with Docker
  • ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
  • Deepoc 大模型在无人机行业应用效果的方法
  • Python函数参数实例练习--输出信息
  • 抗量子域名系统:全面的系统级研究
  • 前端领域的技术热点与深度解析
  • 对selenium进行浏览器和驱动进行配置Windows | Linux
  • [面试]手写题-Promise.all() Promise.race()
  • 博图SCL编程:结构体(STRUCT)使用详解与实战案例
  • HTML<span>元素详解
  • 安装bcolz包报错Cython.Compiler.Errors.CompileError: bcolz/carray_ext.pyx的解决方法
  • 条件运算符和逗号运算
  • Intel Fortran Compiler (ifx) 详细使用指南:新一代 Fortran 编译器在流体动力学模拟中的应用
  • 51单片机CPU工作原理解析
  • python环境快速搭建
  • 深入比较 Gin 与 Beego:Go Web 框架的两大选择
  • Spring Boot 统一功能处理:拦截器详解
  • 机器视觉检测系统的影响因素解析
  • Prompt 精通之路(七)- 你的终极 AI 宝典:Prompt 精通之路系列汇总
  • 《Building REST APIs with Flask》读后感
  • 打造现代Web应用的高效解决方案:Full Stack FastAPI模板
  • JVM 垃圾回收(GC)笔记