首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle SQL性能优化40条,值得收藏

Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属。 16....(4)多个平等的索引SQL语句的执行路径可以使用分布在多个表上的多个索引时,ORACLE会同时使用多个索引并在运行时对它们的记录进行合并,检索出仅对全部索引有效的记录。...在ORACLE选择执行路径时,唯一性索引的等级高于非唯一性索引。然而这个规则只有当WHERE子句中索引列和常量比较才有效。如果索引列和其他表的索引类相比较。这种子句在优化器中的等级是非常低的。...执行路径如下: TABLE ACCESS BY ROWID ON EMP INDEX RANGE SCAN ON CAT_IDX (7)强制索引失效 如果两个或以上索引具有相同的等级,你可以强制命令ORACLE...在这种情况下,ORACLE将使用唯一性索引而完全忽略非唯一性索引

2.6K30

Oracle SQL调优系列之优化器基础知识

索引快速全扫描 1.2.5 索引跳跃式扫描 拓展补充 二、Oracle的优化器 2.1 优化器简介 2.2 SQL执行过程 2.3 结果集 三、优化器优化方式 3.1 优化器的优化方式 3.2 基于规则的优化器...索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)来说的,也就是建立唯一性索引才能索引唯一性扫描,唯一性扫描,其结果集只会返回一条记录。...创建唯一性索引SQL是: create unique index 索引名 on 表名(列名) 例子,例子来自《基于OracleSQL优化》一书: scott用户登录 SQL> create table...索引跳跃式扫描(INDEX SKIP SCAN)适用于所有类型的***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标...2.2 SQL执行过程 Oracle SQL的执行过程: 2.3 结果结果集(Row Source)是指包含指定执行结果的集合。结果集适用于RBO和CBO。

78720
您找到你想要的搜索结果了吗?
是的
没有找到

Oracle sql调优(网络优化知识点)

索引快速全扫描 1.2.5 索引跳跃式扫描 拓展补充 二、Oracle的优化器 2.1 优化器简介 2.2 SQL执行过程 2.3 结果集 三、优化器优化方式 3.1 优化器的优化方式 3.2 基于规则的优化器...索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)来说的,也就是建立唯一性索引才能索引唯一性扫描,唯一性扫描,其结果集只会返回一条记录。...创建唯一性索引SQL是: create unique index 索引名 on 表名(列名) 例子,例子来自《基于OracleSQL优化》一书: scott用户登录 SQL> create table...索引跳跃式扫描(INDEX SKIP SCAN)适用于所有类型的***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标...2.2 SQL执行过程 Oracle SQL的执行过程: 2.3 结果结果集(Row Source)是指包含指定执行结果的集合。结果集适用于RBO和CBO。

68000

85-这些SQL调优小技巧,你学废了吗?

当你ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。...多个平等的索引SQL语句的执行路径可以使用分布在多个表上的多个索引时,ORACLE会同时使用多个索引并在运行时对它们的记录进行合并,检索出仅对全部索引有效的记录....等式比较和范围比较 当WHERE子句中有索引列,ORACLE不能合并它们,ORACLE将用范围比较.举例:DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引....举例:如果唯一性索引建立在表的A列和B列上,并且表中存在一条记录的A,B值为(123,null) ,ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入)....然而如果所有的索引列都为空,ORACLE将认为整个键值为空,而空不等于空. 因此你可以插入1000条具有相同键值的记录, 当然它们都是空!

98710

Oracle优化器基础知识

,下面给出B树索引的图,图来自《基于OracleSQL优化》一书: ?...索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)来说的,也就是建立唯一性索引才能索引唯一性扫描,唯一性扫描,其结果集只会返回一条记录。...创建唯一性索引SQL是: create unique index 索引名 on 表名(列名) 例子,例子来自《基于OracleSQL优化》一书: scott用户登录 SQL> create table...索引跳跃式扫描(INDEX SKIP SCAN)适用于所有类型的***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标...SQL依然可以使用跳跃索引,定义解释有点绕,举个例子说明 假如新建了复合索引: create index 索引名 on 表名(列名1,列名2) 这里新建了复合索引,假如查询如: select * from

66040

读书笔记-《基于OracleSQL优化》-第一章-3

RULE:表示Oracle将使用RBO来解析目标SQL,此时SQL中涉及的各个对象的统计信息对于RBO没有任何作用。...访问索引的方法: (1)、索引唯一性扫描:INDEX UNIQUE SCAN,仅适用于where条件中是等值查询的目标SQL。...因为扫描的对象是唯一性索引,所以索引唯一性扫描的结果至多只会返回一条记录。...(2)、索引范围扫描:INDEX RANGE SCAN,当扫描的对象是唯一性索引时,目标SQL的where条件一定是范围查询(谓词条件为BETWEEN、等);当扫描的对象是非唯一性索引时,对目标SQL...与索引全扫描的区别: (1)、索引快速全扫描只适用于CBO。 (2)、索引快速全扫描可以使用多块读,也可以并行执行。 (3)、索引快速全扫描结果不一定是有序的。

75720

Oracle SQL调优系列之看懂执行计划explain

SQL,用PLSQL执行一下,这是plsql的简单使用 解释一下这些参数的意思: 基数(Rows):Oracle估计的当前步骤的返回结果集行数 字节(Bytes):执行SQL对应步骤返回的字节数...) 索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)来说的,也就是建立唯一性索引才能索引唯一性扫描,唯一性扫描,其结果集只会返回一条记录。...)适用于所有类型的B树索引,一般不包括唯一性索引,因为唯一性索引索引唯一性扫描。...,也可以并行执行 索引全扫描会按照叶子块排序返回,而索引快速全扫描则是按照索引段内存储块顺序返回 索引快速全扫描的执行结果不一定是有序的,而索引全扫描的执行结果是有序的,因为索引快速全扫描是根据索引行在磁盘的物理存储顺序来扫描的...***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标SQL依然可以使用跳跃索引 如图执行计划就有

71310

Oracle SQL调优系列之访问数据的方法

,下面给出B树索引的图,图来自《基于OracleSQL优化》一书: 对于B树索引,分成两种类型的数据块,一种是索引分支块,另外一种是索引叶子块,索引根块是一种特殊的索引分支块。...索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)来说的,也就是建立唯一性索引才能索引唯一性扫描,唯一性扫描,其结果集只会返回一条记录。...创建唯一性索引SQL是: create unique index 索引名 on 表名(列名) 例子,例子来自《基于OracleSQL优化》一书: scott用户登录 SQL> create table...索引跳跃式扫描(INDEX SKIP SCAN)适用于所有类型的***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标...SQL依然可以使用跳跃索引,定义解释有点绕,举个例子说明 假如新建了复合索引: create index 索引名 on 表名(列名1,列名2) 这里新建了复合索引,假如查询如: select * from

35040

Oracle调优之看懂SQL执行计划explain

解释一下这些参数的意思: 基数(Rows):Oracle估计的当前步骤的返回结果集行数 字节(Bytes):执行SQL对应步骤返回的字节数 耗费(COST)、CPU耗费:Oracle估计的该步骤的执行耗费和...) 索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)来说的,也就是建立唯一性索引才能索引唯一性扫描,唯一性扫描,其结果集只会返回一条记录。...)适用于所有类型的B树索引,一般不包括唯一性索引,因为唯一性索引索引唯一性扫描。...,也可以并行执行 索引全扫描会按照叶子块排序返回,而索引快速全扫描则是按照索引段内存储块顺序返回 索引快速全扫描的执行结果不一定是有序的,而索引全扫描的执行结果是有序的,因为索引快速全扫描是根据索引行在磁盘的物理存储顺序来扫描的...***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标SQL依然可以使用跳跃索引 如图执行计划就有

7.2K21

MySQL和Oracle唯一性索引的差别(r12笔记第83天)

有一个表里存在一个唯一性索引,这个索引包含3个列,这个唯一性索引的意义就是通过这3个列能够定位到具体1行的数据,但是在实际中却发现这个唯一性索引还是有一个地方可能被大家忽略了。...这一点上,Oracle和MySQL的立场是一致的,那就是主键和唯一性索引的差别,出了主键的根红苗正,主键是唯一性索引的一种之外,还有一点很重要,我们掰开了揉碎了来说。...为了方便演示,我就创建一个简单的表unique_test\create table unique_test(id int,name varchar(30)) 添加唯一性约束 alter table unique_test...,那就是主键约束相比唯一性约束来说,还有一个默认的属性,那就是not null 但是同样都是null的差别,MySQL和Oracle结果是否相同呢。...在Oracle里面,代表的含义是不同的,大大不同,可以看看下面的结果来对比一下。

1.2K60

删除数据库表分区后,索引不可用(失效)的解决方案

另外,查询结果中,uniqueness 字段的部分值为 ‘UNIQUE’,说明存在唯一性索引。 3.2....验证索引唯一性约束 执行以下 SQL 语句验证索引唯一性约束: SELECT t1.owner , t1.constraint_type , t1.table_name...另外,在查询结果中还发现每个涉及失效索引的表均存在唯一性索引。 3.3....LOCAL; 对于主键或唯一性约束,可以使用以下语句创建唯一性局部分区索引: ALTER TABLE [schema.]...局部索引查询较慢,多应用于数仓环境及 OLAP 系统中。 局部索引具有更高的可用性,更便于管理,部分分区 DDL 操作不会导致其不可用。 局部索引可用是前缀索引,也可以是非前缀索引

1.8K11

Oracle数据库,浅谈Oracle索引提高效率

根据优化器的不同,SQL语句中基础表的选择是不一样的。...4、多个平等的索引SQL语句的执行路径可以使用分布在多个表上的多个索引时,ORACLE会同时使用多个索引并在运行时对它们的记录进行合并,检索出仅对全部索引有效的记录。...在ORACLE选择执行路径时,唯一性索引的等级高于非唯一性索引。然而这个规则只有当WHERE子句中索引列和常量比较才有效。如果索引列和其他表的索引类相比较。这种子句在优化器中的等级是非常低的。...7、强制索引失效如果两个或以上索引具有相同的等级,你可以强制命令ORACLE优化器使用其中的一个(通过它,检索出的记录数量少) 。 ?...9、自动选择索引如果表中有两个以上(包括两个)索引,其中有一个唯一性索引,而其他是非唯一性索引。在这种情况下,ORACLE将使用唯一性索引而完全忽略非唯一性索引。 ?

1.2K30

【数据库04】中级开发需要掌握哪些SQL进阶玩法

、空间索引、动态散列等索引结构的拓展,高级应用开发中的性能调整,应用程序移植和标准化,数据库与区块链等…) 文章简介:上篇文章我们把数据库的增删改查讲解的透透的了,这篇文章我们将学习具有更复杂形式的...使用where时不会补全具有空值的元组,使用on则会。 另外,常规连接也被称为内连接,可以使用缺省的关键字inner。...但是使用诸如Oracle的数据库,自动提交并不是DML语句的缺省设置,请保证在添加或者修改数据后发出commit命令。不过Oracle会自动提交DDL语句。...5.5 属性的时态有效性 在某些情况下可能需存储历史数据,比如,我们希望不仅存储每位教师的当前工资,而且存储整个工资历史,可通过instructor关系模式添加两个属性来指定给定工资值的开始时间和结束时间...如果索引创建成功,则后面违反候选码声明的任何元组插入企图将会失败。请注意,如果数据库系统支持标准的唯一性声明,这里的唯一性特性就是多余的。 删除索引

1.6K20

深入解析:Oracle由11g而始的数据库一致读行为的改变

掉empno上的唯一性索引后),Oracle并没有做RowCR Optimization,而是做了常规的一致读。...Optimization,即并没有马上读到commit后的数据,这说明即使列empno上存在非唯一性索引Oracle也没有做RowCR Optimization,而是做了常规的一致读。...successfully completed 上述Session 1的最终输出结果显示Oracle此时没有做常规的一致读,而是马上读到了commit后的数据,即在列empno存在唯一性索引的情形下,...successfully completed 上述Session 1的最终输出结果显示即使列empno上存在唯一性索引Oracle此时也没有做RowCR Optimization,即并没有马上读到commit...最后,我们来总结一下,从上述测试过程我们可以得到如下结论: 在Oracle 11g以及后续的版本中,默认情况下(即隐含参数“_row_cr”的值为TRUE的情况下),如果是通过唯一性索引去访问数据,则我们就可以马上读到

836100

【云和恩墨大讲堂】从执行计划洞察ORACLE优化器的“小聪明”

在某搜索网站中,“oracle 执行计划”关键字的搜索结果与“oracle”关键字的搜索结果占比为1.7%。足可见执行计划在ORACLE中举足轻重的地位: ?...支持ORACLE做如此大胆裁剪的理由是: 1、 LEFTJOIN在没有where条件过滤的时候,是不会减少结果数据量的; 2、 如果被关联的字段是被关联表的主键(或者唯一性字段),那么是不会使结果数据量增多的...即便我们在SQL中进行了(唯一性)约束,ORACLE也会选择视而不见,比如如下SQL: SELECTCOUNT(1) FROM EMP E LEFT JOIN (SELECTDISTINCT DEPTNO...,即子查询D对整个SQL返回的结果是没有任何影响的,该SQL完全等价于如下SQL: SELECT COUNT(1) FROM EMP E 而事实上呢,我们看看ORACLE的执行计划: ?...很明显,在实际的执行过程中,DEPTNO是被TO_NUMBER函数包了一层,自然就走不了索引。那么是什么让ORACLE如此“昏庸”,以致“无事生非”的添加一个函数呢?

97031

Oracle查询性能优化

同样在联结多个表时使用索引也可以提高效率. 2) 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证.。那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列....如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,...然而如果所有的索引列都为空,ORACLE将认为整个键值为空而空不等于空. 因此你可以插入1000 条具有相同键值的记录,当然它们都是空!...为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型 6、索引的一些“脾气” a....语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序.

2.2K20

SQL 性能优化

Oracle 优化器RBO, CBO RBO 基于规则的优化器 oracle 10g开始,已经丢弃RBO CBO 基于成本的优化器 oracle 8中开始引入的 Oracle 解析器按照从右到左的顺序处理...num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了;再或者使用连接来替换 尽量用union all代替union union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作...如何高效的写出一个替代not exists的sql语句?...不建议使用%前缀模糊查询 例如LIKE “%name”或者LIKE “%name%”,这种查询会导致索引失效而进行全表扫描。但是可以使用LIKE “name%”。 那如何查询%name%?...如下图所示,虽然给secret字段添加索引,但在explain结果并没有使用 避免隐式类型转换 where 子句中出现 column 字段的类型和传入的参数类型不一致的时候发生的类型转换,建议先确定where

89340

SQL 性能优化 总结

(4)减少访问数据库的次数: ORACLE在内部执行了许多工作: 解析 SQL 语句,估算索引的利用率, 绑定变量 , 读数据块等。...在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore 技术,而having 就不能,在速 度上后者要慢如果要涉及到计算的字段...如果至少有一个列不为空,则记录存在于索引中.举例:如果唯一性索引建立在表的A 列和B 列上,并且表中存在一条记录的A,B 值为(123,null) , ORACLE将不接受下一条具有相同 A,B 值(123...因此你可以插入 1000条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引 列中,所以WHERE子句中对索引列进行空值比较将使 ORACLE 停用该索引....(28) 用UNION-ALL替换UNION ( 如果有可能的话): 当SQL 语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL 的方式被 合并, 然后在输出最终结果前进行排序

1.8K20

oracle数据库sql语句优化(循环语句有几种语句)

下面列举一些工作中常常会碰到的OracleSQL语句优化方法: 1、SQL语句尽量用大写的; 因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。...6、减少访问数据库的次数: ORACLE在内部执行了许多工作: 解析SQL语句,估算索引的利用率,绑定变量,读数据块等。...在单表查询统计的情况下,如果要过滤的条件没 有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having 就不能,在速度上后者要慢。...如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null), ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入)。...然而如果所有的索引列 都为空,ORACLE将认为整个键值为空而空不等于空。因此你可以插入10000条具有相同键值 的记录,当然它们都是空!

2.8K10

数据库性能优化-索引sql相关优化

----  二、优化相关( 仅针对InnoDB存储引擎所支持的BTree索引) 1.索引的设计原则 选择唯一性索引  唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。...例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。...并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用。...那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。...但如果联合索引是(a,b,d,c)的话,则a b d c都可以使用到索引,只是最终c是一个范围值。

1.8K30
领券