Oracle sql优化示例

1. 循环插入1到10w数值

 1 create or replace procedure proc_test
 2 as
 3 begin
 4   for i in 1..100000
 5     loop
 6       execute immediate
 7       ‘insert into t values(‘ || i || ‘)‘;
 8       commit;
 9     end loop;
10 end;
11 /

2. 使用变量绑定,减少sql解析

 1 create or replace procedure proc_test
 2 as
 3 begin
 4   for i in 1..100000
 5     loop
 6       execute immediate
 7       ‘insert into t values(:x) ‘ using i; ---使用变量,sql只需解析一次,而第一种写法,需要解析1w次。
 8       commit;
 9     end loop;
10 end;
11 /

3. 使用静态SQL,编译过程即完成解析,而动态SQL是在执行过程中解析的

 1 create or replace procedure proc_test
 2 as
 3 begin
 4   for i in 1..100000
 5     loop
 6       --execute immediate 删除该行, execute immediate是一种动态SQL写法, 常用于表名,字段名是变量,入参的情况,但这里表名是已知的,直接用静态SQL即可,         --静态SQL会自动使用绑定变量, 而且是在编译过程就解析好了,而动态SQL是在执行过程中解析的。
 7       insert into t values(i);
 8       commit;
 9     end loop;
10 end;
11 /

4. 批量commit.

 1 create or replace procedure proc_test
 2 as
 3 begin
 4   for i in 1..100000
 5     loop
 6       insert into t values(i);
 7     end loop;
 8     commit; --批量提交
 9 end;
10 /

5. 写成一条sql,由原来过程一条一条插入,变成一个集合的概念,一整批写入DATA BUFFER区。

1 insert into t select rownum from dual connect by level<=1000000;
2 commit;

6. 直接路径方式插入数据,insert into t select ...是将数据先写入DATA BUFFER中,再刷到磁盘里,而create table t ...跳过了数据缓存区,直接写入磁盘。

这种方式一般用于数据迁移。

1 create table t as select rownum x from dual connect by level<=1000000;

7. 还有一种方法,在多CPU机器上,关闭日志nologging,并且设置parallel 16 表示用到16个CPU。

不过该方法会占用大量CPU资源,比较影响其他应用,使用时要三思而后行。

1 create table t nologging parallel 16
2 as select rownum x from dual connect by level<=1000000;

原文地址:https://www.cnblogs.com/jingweiyoung/p/8494495.html

时间: 2024-08-29 05:59:10

Oracle sql优化示例的相关文章

oracle sql优化技巧

数据库方面一直是自己的薄弱项,现在以本文慢慢积累总结oracle sql优化的一些技巧. 1.首先大家很容易想到的一切优化技巧--索引,索引有啥用?索引在表数据量很大时添加索引确实能加快查询速度,通过索引查询能很好地避免全表扫描. 但应该也要注意的时这是在数据量较大的时候.同时数据较小时,反而浪费索引空间.另外,添加索引之后数据的插入,更新反而会变慢,在插入或修改记录 时需要新建索引并排序. 索引创建语句: create [unique] index xxx on A(column 1,colu

oracle sql优化

第一掌 避免对列的操作 任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数.计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数. 例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢: select * from record where  substrb(CardNo,1,4)='5378'(13秒) select * from record where  amount/30< 1000(11秒) select * from recor

【重磅干货】看了此文,Oracle SQL优化文章不必再看!

听“俊”一席话,胜读十年书.看了这篇由DBA+社群联合发起人丁俊大师(网名:dingjun123)分享的SQL优化大作,其他Oracle SQL优化文章都不必再看了! 专家简介 丁俊 网名:dingjun123 DBA+社群联合发起人 性能优化专家,Oracle ACEA,ITPUB开发版资深版主.8年电信行业从业经验,在某大型电信系统提供商工作7年,任资深工程师,从事过系统开发与维护.业务架构和数据分析.系统优化等工作.擅长基于ORACLE的系统优化,精通SQL.PL/SQL.JAVA等.电子

Oracle SQL优化一(常见方法)

1.表访问方式优化: a)普通表优先“Index Lookup 索引扫描”,避免全表扫描 大多数场景下,通过“Index Lookup 索引扫描”要比“Full Table Scan (FTS) 全表扫描”效率要高的多.在编写SQL时,为了保证查询能够使用索引,需要避免出现如下场景: is null 和 is not null 在oracle中null是不能够作为索引的,如果某列数据中有“null”,不要在该列上创建索引,即使创建,也不会提高查询性能. 而在SQL语句中,如果使用is null和

oracle sql优化笔记

oracle优化一般分为:1.sql优化(现在oracle都会根据sql语句先进行必要的优化处理,这种应该用户不大了,但是像关联和嵌套查询肯定是和影响性能的) A.oracle的sql语句的条件是从右往左执行的,如下语句:select * from t_user where nation='回族' and age > 20.oracle首先是查询年龄大于20岁的,再查询民族为回族的,最后汇总两次得到的结果. B.根据A中说的sql语句执行特点,上面的语句是可以进行优化的.A中的sql语句查询条件

Oracle SQl优化总结

连续两个公司都作为外派人员到客户方工作,缺少归属感的同时,对数据库技术的热爱是我唯一的安慰,毕竟这是自己喜欢的事情,还可以做下去. 因为客户项目的需要,我又开始接触Oracle,大部分工作在工作流的优化和业务数据的排查上.为了更好的做这份工作,我有参考过oracle达人,Oracle.10g性能分析与优化思路,基于海量数据的数据库设计与优化等书籍,以及案例学习SQL优化的视频等.基本上我工作中接触的主要是Oracle SQl的优化,基于长时间做SQL优化工作,现在对Oracle的SQL优化做一下

Oracle sql优化必知——表的访问

<访问数据的方法> 访问表中的数据有两种:1.直接访问表   2.先访问索引,再回表 1.直接访问表的两种方法: ①.全表扫描 全表扫描是指Oracle在访问目标表的数据时,会从该表所占用的第一个区(extent)的第一个块(block)开始扫描,一直扫描到该表的高水位线,这段范围内的所有数据库都必须读到,当然如果目标sql的where中指定的过滤条件,最后只返回满足条件的数据即可:(有时候全表扫描的效率还是非常高的,但是随着表的数据增多 资源消耗也会在逐步增加) ②.rowid扫描 rowi

好记性不如烂笔头之Oracle SQL优化(2)

*sql优化基于oracle11gR2读书笔记* 三.Oracle里的Cursor Oracle中的Cursor是Oracle数据库中SQL解析和执行的载体,是c语言的一种数据结构(oracle是用c写的). Oracle数据库中的Cursor分为两种:一种是Shared Cursor,另外一种是Session Cursor. 1.Shared Cursor 先来了解一下什么是库缓存.库缓存对象. 我们知道Oracle中有一个全局内存区域SGA,而SGA又可以分为java池.大池.共享池.空池等

[terry笔记]Oracle SQL 优化之sql tuning advisor (STA)

前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富的DBA可以从各种方向下手,有时通过建立正确索引即可获得很好的优化效果,但是那些复杂SQL错综复杂的表关联,却让DBA们满头大汗. 如下特别介绍一种oracle官方提供的科学优化方法STA,经过实践,不敢说此特性绝对有效,但是可以开阔思路,并且从中学到许多知识,不再用“猜”的方式去创建索引了. SQL优化器SQL Tuning Advisor (STA),是oracle的sql优化补助工具.