app教程网 学习教程 oraclesql优化技巧(oracle sql优化一般从那几个方面入手)

oraclesql优化技巧(oracle sql优化一般从那几个方面入手)

操作员优化

IN运算符

SQL用IN写的好处是写起来简单明了,比较适合现代软件开发的风格。

然而,带有IN的SQL的性能总是很低。从ORACLE执行的步骤中分析带IN的SQL与不带IN的SQL有以下区别:

ORACLE试图将其转换为多个表的连接。如果转换不成功,它将首先执行in中的子查询,然后查询外层表记录。如果转换成功,将通过多表连接直接查询。这表明SQL with IN至少有一个转换过程。

普通SQL可以转换成功,但是对于包含分组统计的SQL不能转换。

推荐方案:尽量不要在业务密集型SQL中使用IN操作符。

不在运算符中

强烈建议执行此操作,因为它无法应用表的索引。

推荐方案:替换为不存在或(外部连接判断为空)方案。

运算符(不等于)

并不意味着操作符永远不会使用索引,所以处理它只会产生一个全表扫描。

推荐方案:用其他功能相同的操作代替,比如

a0改为a0或A0。

将“更改为”

为空或非空操作(判断字段是否为空)

判断一个字段是否为空,一般不应用索引,因为B树索引不索引空值。

推荐方案:

将其替换为具有相同功能的其他操作,例如

If it is not empty, change it to a0 or a ""and so on.

该字段不允许为空,并使用默认值替换空值。例如,如果业务扩展应用程序中的状态字段不允许为空,则默认值为应用程序。

建立位图索引(不能建立带分区的表,位图索引很难控制。比如字段值太多,索引会降低性能,多人更新操作会增加数据块锁的现象)。

和运算符(大于或小于运算符)

一般情况下,大于或小于运算符不需要调整,因为当它有索引时会使用索引搜索,但在某些情况下可以优化,比如一个有100万条记录的表,一个数值字段A,30万条记录A=0,30万条记录A=1。

对于390,000条记录,A=2;对于10,000条记录,A=3。那么执行A2和A=3的效果就大不一样了,因为在A2中,ORACLE会先找到2的记录索引再进行比较,而在A=3中,ORACLE会直接找到3的记录索引。

LIKE运算符

LIKE操作符可以使用通配符查询,其中的通配符组合可能达到几乎任何查询,但是如果使用不好,就会造成性能问题。例如,类似“t00%”的查询不会引用索引。

而像‘x 5400%’会指范围索引。一个实际的例子:业务号码YY _ Bhlike' T00% '可以使用YW_YHJBQK表中业务号码后的用户标识号进行查询,这将导致全表扫描。

如果改成像' x5400% '这样的YY_BH或者像' b5400% '这样的YY _ BH,用YY _ BH的索引在两个范围内查询,性能肯定会有很大提升。

本文来自网络,不代表本站立场,转载请注明出处:https: