再有人问你Oracle的SQL性能优化,这篇文章甩给他!

news2024/12/28 17:53:00

SQL优化对于数据库应用程序的性能、稳定性、可靠性、数据质量、开发效率和管理效率都具有重要意义,以下是给大家分享的一些技巧!

1.获取正确的执行计划

1.1 awr执行计划

select * from table(dbms_xplan.display_awr('&sql_id'));
--awr中记录的执行计划(多个)

1.2 share pool计划

select * from 
table(dbms_xplan.display_cursor('&sql_id',null,'typical'));

1.3.真实的资源消耗

SELECT 
DBMS_SQLTUNE.REPORT_SQL_MONITOR(
sql_id=>'djpz68jy0wbgv',
type =>'TEXT',
report_level => 'ALL') 
AS report FROM dual;

2.索引的应用

2.1 如何建索引

1.适合创建索引的列
索引覆盖、避免排序
复合索引尽量兼顾更多SQL
该列在表中的唯一性特别高或者有些状态列有倾斜值
等值谓词条件字段放在前面,非等值谓词条件字段放在后面
表关联使用Nested Loop 被驱动表的关联字段上建议创建索引
该SQL语句是主流的业务,具有高并发,where条件中出现的列

2.不适合创建索引的列
DML频繁的表不适合创建索引,索引会带来额外的维护成本
Where条件中不会使用的列也不适合创建索引

2.2 那种情况不走索引

1.统计信息不准
2.倾斜值
3.聚簇因子
4.隐式转换
5.条件列上存在运算符
6.索引状态
7.表很小
8.null值 要么where条件限制is not null 
要么字段属性设为not null

2.3 表连接

1.Nested Loops:每读一条驱动表的数据,就根据连接条件去被驱动表中查找对应的数据,直到读完驱动表所有数据为止。

一般用于驱动表小,被驱动表较大,且关联字段有索引的情况。

2.Hash Join:首先在内存根据连接条件生成一张hash表,然后再去扫描被驱动表,并将每行与hash表对比,找到所有匹配的行。

一般用于两个大表关联、查询小表大部分数据、相同数量级的表关联。

3.Sort Merge Join:将两个表的数据分别全部读取出来并排序,然后再根据连接条件合并。

3.绑定变量

如何查询已执行的目标SQL中绑定变量的值
V$SQL_BIND_CAPTUTE;
DBA_HIST_SQLBIND;

1.如果是绑定变量,选择率: 1/numdistinct
2.如果是是字面值,选择率:
有直方图:该字段某个具体值的1/数据记录
没有直方图:1/numdistinct

4.统计信息

该何时收集统计信息呢?
很难用一种收集策略而适合所有的情况。但对于一些有代表性的对象,我们可以制定相对更适合的收集策略。

一、针对每天规律变化的表(插入的数据量和数据特征基本近似)
建议策略:使用数据库的自动收集任务。或者在收集了代表性的统计信息后,将该表的统计信息锁定,不再收集。但对于会列中的最大值或最小值出现变化,且该列还会出现在WHERE子句中时,就不适用锁定的方法了。

二、针对临时或每特定时间使用一次的中间表
建议策略:建议在完成数据准备后(通常是大量的插入或更新后),手动做一次统计信息的收集。或者在相关SQL中加入动态采样的提示(/*+ dynamic_sampling(<表别名> <采样级别>) */)。若可以确定有最适合的执行计划,可以在数据库层面做绑定或在SQL代码中加入提示来固定执计计划。

三、数据会出现大幅变化(指一段时间内,插入,更新和删除的行较多)
建议策略:若相关SQL较少(使用绑定变量会减少不一样SQL的数量),可以考虑使用动态采样的方法。若相关SQL较多,但绝大多数SQL可以在统计信息不再更新后,仍能生成正确的执行计划,那么可以考虑将相关表上的统计信息锁定,并针对极少数对统计信息的准确性敏感(比如前边提到的谓词越界的情况)的SQL做执行计划的绑定或固定。

总结

通过优化SQL语句,可以提高数据库的响应速度,降低系统资源的消耗,从而提升整体应用性能!优化是一个长期的持续的过程,分析TOP SQL、分析AWR报告、定期对数据库进行巡检至关重要!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

API网关之Apache ShenYu

Apache ShenYu&#xff08;原名Soul&#xff09;是一个开源的API网关&#xff0c;旨在支持高性能、跨语言和云原生架构。它为管理和控制客户端与服务之间的数据流提供了一种高效且可扩展的解决方案。 文档见 Apache ShenYu 介绍 | Apache ShenYu 以下是Apache ShenYu的详细介…

蓝桥杯2021第十二届蓝桥杯青少年组省赛试题真题

带我去看题解&#xff01;&#xff01;&#xff01; 带我去看题单&#xff01;&#xff01;&#xff01; 目录 第一题&#xff1a;[2021第十二届蓝桥杯青少年组省赛] 字符串 题目背景 题目描述 输入格式 输出格式 输入输出样例 第二题&#xff1a;[2021第十二届蓝桥杯…

谷歌云AI新作:CROME,跨模态适配器高效多模态大语言模型

CROME: Cross-Modal Adapters for Efficient Multimodal LLM https://arxiv.org/pdf/2408.06610 Abstract 研究对象&#xff1a;Multimodal Large Language Models (MLLMs) demonstrate remarkable imagelanguage capabilities, but their widespread use faces challenges in…

转行游戏测试,小白到入门我只用了5天

声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2183.html Hey朋友们&#xff01;&#x1f44b;有没有想过&#xff0c;AI怎么让游戏测试变得更轻松&#xff1f;&#x1f914;&#x1f3ae;作为刚入行游戏界的小白鼠&am…

使用Node-RED发送数据到巴法云

上一篇博文完成了Node-RED的安装&#xff0c;下面来尝试一下用Node-RED来发送数据到巴法云服务器。 我在教学用MQTT工具的思考-CSDN博客中说过&#xff0c;巴法云支持云云互联&#xff0c;可以连小米、百度&#xff0c;学生使用的兴趣高。所以今天先测试Node-RED和巴法云的连接…

TOMCAT入门到精通

目录 一 WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二 WEB框架 2.2后台应用架构 2.2.1单体架构 2.2.2微服务 2.2.3单体架构和微服务比较 三 tomcat的…

VScode 连接远程服务器

1、 2、 3、免密登录 1、本地生成密钥 ssh-keygen2、生成的密钥默认在 C:\Users\***\.ssh\ 中3、将私钥 C:\Users\***\.ssh\id_rsa 添加到上面的配置文件中的 IdentityFile 项内4、将公钥 C:\Users\***\.ssh\id_rsa\id_rsa.pub 拷贝到远程 ~/.ssh/authorized_keys 中 4、远程…

智能巡检新突破:防爆巡检机器人打造油气化工安全高效新标杆

一、项目背景 2023年中国石油产量达到2.08亿吨、油气勘探投资额超过840亿元&#xff0c;油气开发投资额约2860亿元。油气的产量和开发投资在大幅增长扩大&#xff0c;而油气田、石油石化企业在日常生产维护时需要大量的投入人工进行巡检。传统的人工巡检存在巡检采集点增多、高…

「C++系列」vector 容器

文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一&#xff1a;存储动态大小的数据集合案例二&#xff1a;实现栈 三、相关链接 一、vector 容器 C 中的 vector 是一个非常常用的容器&#xff08;container&#xff09;&#…

望繁信科技入选2024年第3批上海市高新技术成果转化项目名单

近日&#xff0c;上海望繁信科技有限公司&#xff08;以下简称“望繁信科技”&#xff09;凭借其自主研发的“数字北极星流程挖掘分析软件”项目&#xff0c;成功入选2024年第3批上海市高新技术成果转化项目名单。这一殊荣根据《上海市高新技术成果转化项目认定办法》&#xff…

Prism-学习笔记1-安装Prism

安装Prism 在VS2022中安装如下图&#xff1a; 2. 搜索Prism&#xff0c;安装Prism&#xff1a;&#xff08;ps&#xff1a;如果安装很慢&#xff0c;直接往上搜关键字 Prism template Pack 下载&#xff0c;或者这里我下载好的Prism包&#xff0c;提取码&#xff1a;bi7c&…

Vue3 走马灯Vue3Marquee组件库的使用 文字走马灯 公告栏

介绍 Vue3Marquee 是一个用于在 Vue 3 项目中创建跑马灯&#xff08;Marquee&#xff09;效果的组件库&#xff0c;常见于网站的公告&#xff0c;如文字太长可以考虑使用该组件让文字进行滚动&#xff0c; 当然不止是文字 元素也可以。 项目地址 https://gitcode.com/gh_mir…

信息竞赛2024年第三次csp-j模拟测试赛后总结

目录 一.第一题&#xff1a;孤独的数列 (lonely) 二.第二题&#xff1a;五颜六色 (color) 三.第三题&#xff1a;获取字符串 (obtain) 首先自我反思&#xff0c;因为打错了freopen导致爆零&#xff0c;这是重大的失误&#xff0c;以后绝对不能再犯。 一.第一题&#xff1a;…

【前端】VUE 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用

【前端】VUE2 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用 <template><div><!-- 这里是动态组件--><component :is"component"></component><!-- 这里是动态组件--><br /><br /><br />可…

【源码+文档+调试讲解】学院网站

摘 要 使用旧方法对冀中工程技师学院网站的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在冀中工程技师学院网站的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次…

序列建模之循环和递归网络 - 长短期记忆和其他门控RNN篇

序言 在序列建模的广阔领域中&#xff0c;循环神经网络&#xff08; RNN \text{RNN} RNN&#xff09;以其独特的能力在处理可变长度序列数据上展现出了巨大的潜力。然而&#xff0c;传统的 RNN \text{RNN} RNN在处理长期依赖问题时&#xff0c;往往面临着梯度消失或爆炸的困境…

xss靶场 pwnfunction WW3

目录 代码 代码分析 payload构造 结果 代码 <div><h4>Meme Code</h4><textarea class"form-control" id"meme-code" rows"4"></textarea><div id"notify"></div> </div><scri…

UIAbility组件间的交互

一、Want 是UIAbility组件间交互载体。 Want启动UIAbility组件的两种方式&#xff1a; 1、显示Want启动 启动某个明确UIAbility组件时使用&#xff1b;需要在Want参数中设置启动的应用包名和UIAbility组件名。 2、隐式Want启动 需要使用某个应用的能力&#xff0c;不关心提供能…

在VBA中调用Adobe Acrobat或Reader的命令行工具,实现PDF自动打印 (‾◡◝)

在VBA&#xff08;Visual Basic for Applications&#xff09;中自动打印PDF文件通常不直接支持&#xff0c;因为VBA本身是针对Microsoft Office应用程序&#xff08;如Excel、Word和PowerPoint等&#xff09;的编程语言&#xff0c;并不直接处理PDF文件。但是&#xff0c;你可…

【JAVA多线程】CompletableFuture原理剖析

前文讲解了completablefuture的使用&#xff0c;本文将剖析其核心原理&#xff0c;前文连接&#xff1a; 【JAVA多线程】Future&#xff0c;专为异步编程而生_java future异步编程-CSDN博客 目录 1.任务组成任务链 2.默认使用ForkjoinPool作为线程池 3.任务是被串行执行的…