- 浏览: 599750 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
1.直接路径读方式
2.绑定变量使得速度加快
3.批量提交使得速度加快
4.关闭日志提高性能
5.避免对列进行运算,否则将用不到索引,除非使用函数索引。
6.索引遇到like '%LJB' 或者是'%LJB%'的查询,是用不到索引的
--直接路径读方式 drop table test; create table test as select * from dba_objects where 1=2; set timing on insert /*+ append */ into test select * from t; commit; --注意这个直接路径方式插入试验输出的物理读(这是首次读哦) set autotrace traceonly select count(*) from test;
2.绑定变量使得速度加快
SQL>--未使用绑定变量 SQL> begin 2 for i in 1 .. 100000 3 loop 4 execute immediate 5 'insert into t values ( '||i||')'; 6 end loop; 7 commit; 8 end; 9 / PL/SQL 过程已成功完成。 已用时间: 00: 00: 43.50 SQL>--使用绑定变量 SQL> begin 2 for i in 1 .. 100000 3 loop 4 execute immediate 5 'insert into t values ( :x )' using i; 6 end loop; 7 commit; 8 end; 9 / PL/SQL 过程已成功完成。 已用时间: 00: 00: 04.77
3.批量提交使得速度加快
SQL> drop table t purge; 表已删除。 SQL> create table t(x int); 表已创建。 SQL> set timing on SQL> begin 2 for i in 1 .. 100000 loop 3 insert into t1 values (i); 4 commit; 5 end loop; 6 end; 7 / PL/SQL 过程已成功完成。 已用时间: 00: 00: 11.21 SQL> drop table t purge; 表已删除。 SQL> create table t(x int); 表已创建。 SQL> begin 2 for i in 1 .. 100000 loop 3 insert into t values (i); 4 end loop; 5 commit; 6 end; 7 / PL/SQL 过程已成功完成。 已用时间: 00: 00: 04.26
4.关闭日志提高性能
SQL> --测试直接路径读方式 SQL> drop table test; 表已删除。 SQL> create table test as select * from dba_objects where 1=2; 表已创建。 SQL> set timing on SQL> insert /*+ append */ into test select * from t; 已创建4664384行。 已用时间: 00: 00: 05.01 SQL> --测试nolgging关闭日志+直接路径读方式 SQL> drop table test; 表已删除。 SQL> create table test as select * from dba_objects where 1=2; 表已创建。 SQL> alter table test nologging; 表已更改。 SQL> set timing on SQL> insert /*+ append */ into test select * from t; 已创建4664384行。 已用时间: 00: 00: 04.39
5.避免对列进行运算,否则将用不到索引,除非使用函数索引。
drop table t purge; create table t as select * from dba_objects; create index idx_object_id on t(created); set autotrace traceonly set linesize 1000 --以下写法大量的出现在开发人员的代码中,是一个非常常见的通病,由于对列进行了运算,所以用不到索引,如下: select * from t where trunc(created)>=TO_DATE('2013-12-14', 'YYYY-MM-DD') and trunc(created)<=TO_DATE('2013-12-15', 'YYYY-MM-DD'); 执行计划 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 12 | 2484 | 296 (2)| 00:00:04 | |* 1 | TABLE ACCESS FULL| T | 12 | 2484 | 296 (2)| 00:00:04 | -------------------------------------------------------------------------- 1 - filter(TRUNC(INTERNAL_FUNCTION("CREATED"))>=TO_DATE(' 2013-12-14 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND TRUNC(INTERNAL_FUNCTION("CREATED"))<=TO_DATE(' 2013-12-15 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 1049 consistent gets 0 physical reads 0 redo size 1390 bytes sent via SQL*Net to client 415 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed ---调整为如下等价语句后,就可以用到索引了。 select * from t where created>=TO_DATE('2013-12-14', 'YYYY-MM-DD') and created<TO_DATE('2013-12-15', 'YYYY-MM-DD')+1; 执行计划 --------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 207 | 3 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 207 | 3 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | IDX_OBJECT_ID | 1 | | 2 (0)| 00:00:01 | --------------------------------------------------------------------------------------------- 2 - access("CREATED">=TO_DATE(' 2013-12-14 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "CREATED"<TO_DATE(' 2013-12-16 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 3 consistent gets 0 physical reads 0 redo size 1393 bytes sent via SQL*Net to client 415 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
6.索引遇到like '%LJB' 或者是'%LJB%'的查询,是用不到索引的
create index idx_reverse_objname on t(reverse(object_name)); set autotrace on select object_name,object_id from t where reverse(object_name) like reverse('%LJB'); OBJECT_NAME OBJECT_ID ---------------------------- -- AAALJB 8 执行计划 --------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3596 | 509K| 290 (0)| 00:00:04 | | 1 | TABLE ACCESS BY INDEX ROWID| T | 3596 | 509K| 290 (0)| 00:00:04 | |* 2 | INDEX RANGE SCAN | IDX_REVERSE_OBJNAME | 647 | | 6 (0)| 00:00:01 | --------------------------------------------------------------------------------------------------- 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 5 consistent gets 0 physical reads 0 redo size 496 bytes sent via SQL*Net to client 415 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
发表评论
文章已被作者锁定,不允许评论。
-
sql 查询一些基础数据(不经常变)关联关系时可以把关联关系写入到表中
2018-04-16 15:18 440原来的查询语句 FROM table1 t LEFT ... -
sql 最小化表查询次(col1,col2) = (select col1,col2 from t)
2018-01-02 16:51 555最小化表查询次数 ... -
sql 用inner join取代in和exists
2018-01-02 16:48 1155使用表连接替换EXISTS ... -
oracle HINT详解
2017-09-01 10:42 524ORACLE的HINT详解 hints是oracle提供的 ... -
oracle jdbctemplate如何优化查询速度
2017-08-21 09:33 13251.设置setFetchSize进行优化 // 可以优化 ... -
oracle Parallel模式-Parallel用法(/*+PARALLEL(n)*/)
2017-08-18 16:48 19211.用途 强行启用 ... -
oracle 存储过程学习总结
2016-08-22 08:42 362dbms_output.put_line('CONCAT ... -
oracle SGA总结信息
2016-07-06 10:38 514SGA 系统全局区 SGA是Oracle用来为实例村粗数据和 ... -
oracle where条件分支查询
2016-06-30 16:16 525select * from test xx where ... -
oracle with as用法
2016-06-24 09:58 942with as语法 –针对一个别名 with tmp as ... -
oracle 重复数据处理的sql整理
2016-06-22 14:44 408Oracle 删除重复数据只留一条 1、查找表中多余的重 ... -
oracle 数据库组成部分(数据库(各种文件)+实例(SGA PGA + 后台进程))知识
2016-04-11 19:51 1276一、SQL server中的实例与 ... -
oracle expdp与impdp导入导出
2016-03-17 10:17 1287[b]数据泵工具导出的步骤:[/b] 1、创建DIRECT ... -
oracle 常用sql语句积累
2016-01-28 11:01 5721.删除重复列 delete from t t1 where ... -
oracle forall关键字进行批量操作
2014-12-12 15:26 1048两个数据操纵语言(DML)语句:BULK COLLECT和FO ... -
oracle 表中有子父关系列则使用CONNECT BY PRIOR
2014-10-27 10:08 423查询名字为xx xxx的所有子数据 SELECT re.U ... -
oracle 存储过程使用实例
2014-10-22 17:41 6121.建包 CREATE OR REPLACE PACKA ... -
oracle 删除大量数据后整理表(analyze table xxx compute statistics)
2014-10-17 18:09 22321. DELETE 后 TRUNCATE TABLE ; 然 ... -
oracle splitstr 函数
2014-10-15 17:45 1417splitstr函数 CREATE OR REPLACE ... -
oracle 高效Sql语句总结
2014-10-08 11:23 505No SQL,No cost. SQL语句是造成数据库 ...
相关推荐
【ORACLE SQL语句优化总结】 在Oracle数据库中,SQL语句的优化是提升系统性能的关键环节。以下是一些常见的优化策略: 1)选择最有效的表名顺序:Oracle的解析器按照FROM子句中表的右到左顺序处理,基础表...
本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...
ORACLEsql语句优化,性能优化,语句技巧优化
ORACLE SQL性能优化系列 ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能,ORACLE 提供了多种优化技术。下面我们将详细介绍 ORACLE SQL 性能优化系列中的一些重要知识点。 一...
### Oracle SQL语句优化规则详解 #### 一、选择正确的优化器 在Oracle数据库中,SQL语句的执行效率很大程度上取决于所选的优化器。Oracle提供了三种优化器模式: 1. **基于规则的优化器(RULE)**:这是Oracle...
Oracle SQL语句性能优化是数据库管理中的关键环节,直接影响到系统的响应速度和资源利用效率。本文将详细探讨优化Oracle SQL语句的几个核心策略。 1. 选择合适的优化器 Oracle 提供了三种优化器:RULE(基于规则)...
Oracle sql语句优化53个规则详解
3. **建议与改写**:自动提供优化建议,包括修改SQL语句结构、创建或调整索引、优化连接方式等,有时甚至可以直接改写SQL语句以提高性能。 4. **历史记录与报告**:记录SQL语句的执行历史,生成性能报告,便于跟踪...
Oracle SQL 语句优化,
Oracle SQL 优化 Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表的全表扫描、缓存小型表的全表扫描、检验优化索引的使用、检验优化的连接技术...
Oracle sql语句大全. sql语句的优化资料
oracle中SQL语句优化
2. **SQL语句优化技巧**: - **选择适当的WHERE子句**:使用索引来提高查询速度,避免全表扫描。 - **使用绑定变量**:避免SQL注入,提高执行计划的重用率。 - **减少数据访问**:精确选择需要的列,避免SELECT *...
sql语句优化PPT,总结基本常见的,自己总结的
总之,Oracle SQL语句优化是一个涉及多个方面的过程,包括理解优化器的工作原理、选择合适的优化模式、收集准确的统计信息以及优化数据访问方法。通过对这些方面进行深入研究和实践,可以显著提升数据库的性能,从而...
### Oracle SQL语句优化技术分析 #### 概述 Oracle SQL语句优化是数据库管理中的一个重要环节,通过优化SQL语句可以显著提升系统的响应速度、提高数据库资源的利用率以及改善用户体验。本文将从多个角度出发,详细...
Oracle SQL 语句优化的重要性是不言而喻的。开发人员不能只关注功能的实现,不管性能如何。开发人员不能把 Oracle 当成一个黑盒子,必须了解其结构、处理 SQL 和数据的方法。必须遵守既定的开发规范,未经过 SQL ...
oracle的SQL语句调优总结,Oracle语句优化53个规则详解。