首页 >

Oracle的简单优化实例分析

数据库|mysql教程Oracle的简单优化实例分析
Oracle教程,Oracle的简单优化实例分析,数据库,O
数据库-mysql教程
android ocr识别源码,ubuntu查看软件源,安居客爬虫采集,php $ .,断刀seolzw
(1) 当插入的数据为数据表中的记录数量10%以上时, 首先需要删除该表的索引来提高数据的插入效率,当数据全部插入后再建立索引
最新超级粉丝社区源码,ubuntu攻击机,tomcat8 绿色版下载,床上老是爬虫子,群晖php7.4套件,大连seo诊断lzw
php免费源码,ubuntu终端改透明,爬虫c语言代码,php huanjing,方法seo顾问lzw

1索引的正确使用

在海量数据表中,基本每个表都有一个或多个的索引来保证高效的查询,在ETL过程中的索引需要遵循以下使用原则:

(1) 当插入的数据为数据表中的记录数量10%以上时, 首先需要删除该表的索引来提高数据的插入效率,当数据全部插入后再建立索引。

(2) 避免在索引列上使用函数或计算,在WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描。举例:

低效: SELECT * ROM DEPT WHERE SAL * 12 > 25000;

高效: SELECT * FROM DEPT WHERE SAL > 25000/12;

(3) 避免在索引列上使用NOT和”!=” , 索引只能告诉什么存在于表中,而不能告诉什么不存在于表中,,当数据库遇到NOT和”!=”时,就会停止使用索引转而执行全表扫描。

(4) 索引列上用>=替代>

高效: SELECT * FROM EMP WHERE DEPTNO >=4

低效: SELECT * FROM EMP WHERE DEPTNO >3

两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录。

(5) 函数的列启用索引方法,如果一定要对使用函数的列启用索引,Oracle9i以上版本新的功能:基于函数的索引(Function-Based Index)是一个较好的方案,但该类型索引的缺点是只能针对某个函数来建立和使用该函数。

CREATE INDEX EMP_I ON EMP (UPPER( ENAME));

SELECT * FROM EMP WHERE UPPER(ENAME) = ‘BLACKSNAIL’;

2 游标的正确使用

当在海量数据表中进行数据的删除、更新和插入操作时,用游标处理的效率是最慢的方式,但它在ETL过程中的使用又必不可少,而且使用有着及其重要的地位,所以游标的正确使用尤为重要。

对数据仓库维表的数据进行维护时,因为需要保证维表ID的一致性,所以采用游标的是数据维护完整性的最好方式。由于它的效率低,如果按照普通的方式将无法处理大数据量的维表数据维护(一般是指10万条记录以上的维表),以下是处理这种情况的有效方式:

(1) 在数据抽取的源表中使用时间戳,这样每天的维表数据维护只针对更新日期为最新时间的数据来进行,大大减少需要维护的数据记录数。

(2) 在INSERT和UPDATE维表时都加上一个条件来过滤维表中已经存在的记录,实例为:

INSERT INTO DIM_CUSTOMER SELECT * FROM ODS_CUSTOMER WHERE ODS_CUSTOMER.CODE NOT EXISTS (DIM_CUSTOMER.CODE)

(3) 使用显式的游标(CURSORs) ,因为使用隐式的游标将会执行两次操作,第一次检索记录,第二次检查TOO MANY ROWS 这个EXCEPTION,而显式游标不执行第二次操作。


Oracle的简单优化实例分析
  • Oracle 脚本:清空当前用户下所有表的数据
  • Oracle 脚本:清空当前用户下所有表的数据 | Oracle 脚本:清空当前用户下所有表的数据 ...

    Oracle的简单优化实例分析
  • Oracle 中的PL/SQL自动运行设定
  • Oracle 中的PL/SQL自动运行设定 | Oracle 中的PL/SQL自动运行设定 ...

    Oracle的简单优化实例分析
  • 检索Oracle 锁住的表和解锁
  • 检索Oracle 锁住的表和解锁 | 检索Oracle 锁住的表和解锁 ...