美的选择oracle,选用适合的ORACLE优化器

2024-03-19 22:30

本文主要是介绍美的选择oracle,选用适合的ORACLE优化器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用成本和试探法相结合的方法,查找一种可以最快返回前面少数行的方法;这个参数主要用于向后兼容。

2、访问Table的方式

1) 全表扫描

2) 通过ROWID访问表

3、共享SQL语句

共享的语句必须满足三个条件:

1) 字符级的比较,当前被执行的语句和共享池中的语句必须完全相同。 (区分大小写)

2) 两个语句所指的对象必须完全相同。

3)绑定变量名必须相同,如下列不可以

mZYalYVAAAAAElFTkSuQmCC

4、选择最有效率的表名顺序(只在基于规则的优化器中有效)

表链接时,表记录少的在后面,表.列=表.列 条件在后面

5、WHERE子句中的连接顺序

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

6、SELECT子句中避免使用 ‘ * ’

7、减少访问数据库的次数

当执行每条SQL语句时,ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等等。由此可见,减少访问数据库的次数,就能实际上减少ORACLE的工作量。

例如:

以下有三种方法可以检索出雇员号等于0342或0291的职员。

方法1:(最低效)

select emp_name, salary, grade from emp where emp_no = 342;

select emp_name, salary, grade from emp where emp_no = 291;

方法2:(次低效)

declare

cursor c1(e_no number) is

select emp_name, salary, grade from emp where emp_no = e_no;

begin

open c1(342);

fetch c1

into .., .., ..;

open c1(291);

fetch c1

into .., .., ..;

close c1;

end;

方法3:(高效)

select a.emp_name, a.salary, a.grade, b.emp_name, b.salary, b.grade

from emp a, emp b

where a.emp_no = 342

and b.emp_no = 291;

注意:

在SQL*Plus,SQL*Forms和Pro*C中重新设置ARRAYSIZE参数,可以增加每次数据库访问的检索数据量,建议值为200。

8、使用DECODE函数来减少处理时间

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。

例如:

select count(*), sum(sal)

from emp

where dept_no = 0020

and ename like 'SMITH%';

select count(*), sum(sal)

from , emp

where dept_no = 0030

and ename like 'SMITH%';

你可以用DECODE函数高效地得到相同结果:

select count(decode(dept_no, 0020, 'X', null)) d0020_count,

count(decode(dept_no, 0030, 'X', null)) d0030_count,

sum(decode(dept_no, 0020, sal, null)) d0020_sal,

sum(decode(dept_no, 0030, sal, null)) d0030_sal

from emp

where ename like 'SMITH%';

类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中。

9、删除重复记录

最高效的删除重复记录方法:

delete from emp e

where e.rowid > (select min(x.rowid) from emp x where x.emp_no = e.emp_no);

10、用Where子句替换HAVING子句

11、减少对表的查询

在含有子查询的SQL语句中,要特别注意减少对表的查询。

例如:

低效:

select tab_name

from tables

where tab_name = (select tab_name from tab_columns where version = 604)

and db_ver = (select db_ver from tab_columns where version = 604);

高效:

select tab_name

from tables

where (tab_name, db_ver) = (select tab_name, db_ver) from tab_columns

where version = 604);

低效:

update emp

set emp_cat = (select max(category) from emp_categories),

sal_range = (select max(sal_range) from emp_categories)

where emp_dept = 0020;

高效:

update emp

set (emp_cat, sal_range) = (select max(category), max(sal_range)

from emp_categories)

where emp_dept = 0020;

12、使用表的别名(Alias)

13、用EXISTS替代IN   , EXISTS(或NOT EXISTS)

低效:

select *

from emp –-基础表

where empno > 0

and deptno in (select deptno from dept where loc = 'MELB');

高效:

select *

from emp –-基础表

where empno > 0

and exists (select 'X'

from dept

where dept.deptno = emp.deptno

and loc = 'MELB');

14、用EXISTS替换DISTINCT

---------- --------22、识别‘低效执行’的SQL语句

这篇关于美的选择oracle,选用适合的ORACLE优化器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827430

相关文章

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,