Oracle调优之no_unnest和unnest用法简介

本博客介绍Oracle SQL调优的一种常用也是很实用的方法,也即/*+no_unnest *//*+ unnest*/ ,介绍Oracle 的 /*+unnest *//*+ no_unnest */ 之前,先介绍一下Hint。

Hint对于开发人员来说,可能不是很熟悉,但是对于DBA来说,Hint可是一种调优的利器,Hint 是Oracle 提供的一种SQL语法,是oracle早期因为oracle优化器还不是很完善加上去的,可以辅助oracle优化器,常用于SQL调优,通过Hint强行改变Oracle的执行计划,从而实现SQL调优

也就是说Hint语法可以人工地干预Oracle优化器选择执行计划,当然Hint虽然很实用,但是用的不好,也必然影响SQL性能,国内DBA大牛在其博文里就有曾提到,引用其博文的观点:





详情可以参考作者博文:https://dbaplus.cn/news-10-669-1.html

ok,有了前面的必要知识后,可以介绍一下Oracle的Hint语法之no_unnest和unnest用法了,no_unnest、unnest显然是一对相对的用法

  • unnest:也即解嵌套,nest是嵌套的意思,也就是让子查询展开查询,和外部的查询进行关联、合并,从而得到执行计划
  • no_unnest:双重否定表肯定,也是子查询嵌套(nest),让子查询不展开,这时候子查询往往是最后执行的,作为FILTER条件来过滤外部查询

对于hint语法来说,形式就是/*+ .... */的形式,所以对于这两种嵌套和解嵌套查询,其用法分别为/*+ no_unnest *//*+ unnest*/,加在子查询的select关键字后面即可,我之前博客曾经整理过Hint的常用语法,详情参考我博客Oracle之Hint用法整理笔录

案例记录,ok,最近遇到一个sql查询需要超过1分钟的情况,因为是生产环境问题,比较紧急,业务又特别复杂,SQL很复杂,关联了十几张表(业务需要),如果通过改写sql来调优,比较花时间,业务不够熟悉的情况,所以,首先我也是先通过加必要索引的方式,检查主键、外键是否都有索引了,索引也不能乱叫,还要分析哪些表更新比较多的,然后我是想到hint调优,虽然hint有局限性是在某些sql不改写的情况是可以起到作用的,如果sql改变,hint语法很有可能影响SQL性能,所以使用hint调优并非上策

我遇到的sql是很复杂的,不过本文进行简单描述,其SQL语法类似如下,省略很多的情况:

select id,....,from t1 left join t2 where t2.id in (select k from t1 where ...) ....

首先,我想到用子查询解嵌套方式,进行改写:

select id,....,from t1 left join t2 where t2.id in (select /*+ unnest */ k from t1 where ...) ....

然后通过执行计划查询,性能并没有提升,unnest是让子查询展开,和外部的查询进行关联、合并,首先t1是一张数据量很多的表,然后SQL里先left join了t1,又在子查询里使用了t1,如果unnest的话,不是会进行自连接?所以我改成/*+ no_unnest */,不让子查询展开,让子查询最后执行,作为一个filter条件,经过实验,sql查询从1分钟以上都0点及秒

ok,说明一下,本人水平并没有dba水平,对于SQL调优没有丰富经验,所以请作者可以不管我的案例,只要理解unnest和no_unnest的用法即可,sql调优是很复杂,需要很多调优经验才可以做到游刃有余的,本博客观点,仅代表本人观点,因为对sql调优本没有深入理解,所以也并没有特别推崇使用unnest或者no_unnest,这两种用法具体在什么环境使用适宜?在网上也没有找到特别明确的说明,所以遇到sql性能问题,通过分析执行计划是最有用的

附录:

Oracle调优之no_unnest和unnest用法简介的更多相关文章

  1. Oracle调优总结(经典实践 重要)

    转载:http://langgufu.iteye.com/blog/1974211 Problem Description:1.每个表的结构及主键索引情况2.每个表的count(*)记录是多少3.对于 ...

  2. Oracle调优总结

    Oracle调优总结(经典实践 重要) https://blog.csdn.net/dtjiawenwang88/article/details/74892245 https://www.cnblog ...

  3. Oracle调优之buffer pool相关

    一个oracle block与data buffer中的一个buffer对应.用户进程(server process)负责读取磁盘上的block到data buffer cache中,DEWn进程负责 ...

  4. oracle调优 浅析“会话管理开销”

    调优之浅析"会话管理开销"   [简单介绍]        在调优的过程中,对于会话的管理是比較普遍的问题,由于维护会话的开销相对是比較高的. [过程表现例如以下]         ...

  5. Oracle调优之看懂Oracle执行计划

    @ 目录 1.文章写作前言简介 2.什么是执行计划? 3.怎么查看执行计划? 4.查看真实执行计划 5.看懂Oracle执行计划 5.1 查看explain 5.2 explain执行顺序 5.3 访 ...

  6. ORACLE调优深入理解AWR报告(转)

    AWR报告分析可从以下几点入手: (1).Oacle主机资源开销分析及负载情况 (2).oracle top信息分析 Top 10 Foreground Events by Total Wait Ti ...

  7. (转) 【oracle调优】优化全表扫---cache整张表或索引

    情景分析: 1)某查询必须要走全表扫描 2)该查询执行的频率相当高 3)对执行时间的要求也相当苛刻的话 4)数据库的IO比较吃紧 5)数据库的内存比较宽松 6)该表的大小没有大到离谱 以上情况下,可以 ...

  8. oracle调优 浅析关联设计

    浅析关联设计 [范式] 比較理想的情况下,数据库中的不论什么一个表都会相应到现实生活中的一个对象,如球员是一个对象,球队是一个对象,赛程是一个对象,比赛结果又是一个对象等等,则就是范式. [关联设计] ...

  9. Oracle调优-常用表KEEP到内存中

    数据迁移后性能受到影响,需要将老数据库中keep到内存中的表在新库中keep到内存中,使用如下方法. 新库设置db_keep_cache_size为适当值,这个值的大小不能小于需要keep的表的大小. ...

  10. oracle调优 浅析有效的游标管理

    浅析有效的游标管理 [思路分析] 能够把游标理解成共享的运行计划,当sql不被共享时.常规的解决思路有两个方向: 1.调整共享池的尺寸(共享池的库缓存区中共享运行计划): 2.sql书写时尽量重用绑定 ...

随机推荐

  1. 题解:CF1045I Palindrome Pairs

    题目链接:link. 首先上思路: 如果一个字符串是回文串,只有当其中最多的只有一个字符的出现次数是奇数. 注意我们可以将每个字符串的字符出现次数的奇偶性用一个 \(26\) 位的二进制表示. 接下来 ...

  2. ArkUI-x跨平台Bridge最佳实践

    bridge核心架构思想 平台桥接机制是ArkUI-X框架提供的⼀种ArkTs语⾔和平台原⽣语⾔(Java.OC)之间通信的机制,⽅便⼆者互相调⽤.需要说明的是,平台桥接机制必须在打开ArkUI界⾯时 ...

  3. AI解题助手ChatMoney:提高你的学习效率

    本文由 ChatMoney团队出品 在当今这个信息爆炸的时代,学习不再局限于传统的书籍与课堂.AI解题助手作为新时代的智慧工具,正以其独特的亮点和显著优势,引领学习方式的革新. ChatMoneyAI ...

  4. ChatMoney智能体高情商接话神器

    本文由 ChatMoney团队出品 会说话是一个人的优势,而会接话才是一个人的本事.现实中很多人有这样的困扰:朋友聚会.上门拜访以及和人聊天.是不是完全不知道如何回应,只会说"嗯" ...

  5. 微信小程序实现用户进行推客的注册绑定

    微信推客注册参数解析(UniApp) 这篇文章主要是 uniapp 实现小程序对接推客用户注册,聚焦微信生态推客业务的注册流程解析与 UniApp,结合实战避坑经验. 一.接口参数解析 先让后端调用微 ...

  6. 企业如何通过数据资产化,激活“数据要素x”,乘出新质生产力

    放眼全球,数据作为一种新兴生产要素,在全球经贸活动中扮演着至关重要的角色,驱动着数字经济的蓬勃兴起.据前瞻预测,至2025年,全球数据流动对整体经济增长的贡献预估将达到惊人的11万亿美元. 近几年国家 ...

  7. pytorch入门 - 基于AlexNet神经网络实现猫狗大战

    基于之前的博客 pytorch入门 - AlexNet神经网络,并借助Kaggle 的 Dogs vs Cats Redux 数据集,实现一个基于 AlexNet 的二分类模型识别猫与狗. 完整流程涵 ...

  8. XSY3490 / ZROI P618 广义线段树 + 莫队 + 点分树

    \(Solution\) 为了与普通区间区分,我们称线段树上某个结点 \([l, r]\) 为 块 \([l, r]\) 考虑模拟线段树区间查询 \([l, r]\) 时下放到的底部端点,必然是一堆连 ...

  9. Xamarin.Android -- EditText输入无法实时显示问题

    参考文章:EditText输入内容不显示_edittext输入没有显示-CSDN博客 https://blog.csdn.net/guodashen007/article/details/108768 ...

  10. 485转lora、232转lora

    lora物联网网关ZLAN9743可以实现RS232/485/422/以太网转 LoRa功能 是一款高性价比远距离无线通讯方案.LoRa和GPRS.4G方案相比它无需入网月租费,和Wifi.Zigbe ...