
oracle SQL
文章平均质量分 69
bianxq
这个作者很懒,什么都没留下…
展开
-
Oracle Raw,number,varchar2...转换
Oracle Raw,number,varchar2...转换 在网络中的计算机之间传输 RAW 数据时,或者使用 Oracle 实用程序将 RAW 数据从一个数据库移到另一个数据库时,Oracle 服务器不执行字符集转换。存储实际列值所需要的字节数大小随每行大小而异,最多为 2,000 字节。可能这样的数据类型在数据库效率上会提高,而且对数据由于字符集的不同而导致的不一致的可能...原创 2009-09-17 11:24:08 · 460 阅读 · 0 评论 -
Oracle语句优化规则汇总(二)
1. 用UNION替换OR (适用于索引列) 通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果。 对索引列使用OR将造成全表扫描。注意, 以上规则只针对多个索引列有效。 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低。 在下面的例子中, LOC_ID 和REGION上都建有索引。 高效: SELECT LOC_ID ,...原创 2009-08-19 15:14:18 · 127 阅读 · 0 评论 -
reverse函数与like % 的使用
oracle 提供一个reverse函数,可以实现将一个对象反向转换.比如:SQL> select reverse('123456') from dual;REVERSE('123456')-----------------654321 由于这个函数,是针对数据库内部存储的对象编码进行反转的,因此,在比如:数字,中文等.因为实现存储的并不是直接编码后的结果,而是经过某种内...原创 2009-08-19 18:03:30 · 210 阅读 · 0 评论 -
Oracle的大表,小表与全表扫描
通常对于小表,Oracle建议通过全表扫描进行数据访问,对于大表则应该通过索引以加快数据查询,当然如果查询要求返回表中大部分或者全部数据,那么全表扫描可能仍然是最好的选择。从V$SYSSTAT视图中,我们可以查询得到关于全表扫描的系统统计信息:SQL> col name for a30 SQL> select name,value from v$sysstat2 where ...原创 2009-08-20 11:11:52 · 265 阅读 · 0 评论 -
oracle中关于in和exists,not in 和 not exists、关联子查询、非关联子查询
oracle中关于in和exists,not in 和 not existsin和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。not exists:做NL,对子查询先查,有个虚表,有确定值,所以就算子查询有NULL最终也有值返回not in:做hash,对子查询...原创 2009-08-20 15:01:31 · 1162 阅读 · 0 评论 -
优化SQL语句的一些规则
大家都在讨论关于数据库优化方面的东东,刚好参与开发了一个数据仓库方面的项目,以下的一点东西算是数据库优化方面的学习+实战的一些心得体会了,拿出来大家共享。欢迎批评指正阿! SQL语句: 是对数据库(数据)进行操作的惟一途径; 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低; 可以有不同的写法;易学,难精通。 SQL优...原创 2009-08-20 21:01:20 · 112 阅读 · 0 评论 -
Oracle中巧用CTAS快速建立表格
CTAS是通过查询,然后根据查询的结果来建立表格的一种方式。显然通过这种方式可以省去定义表结构的方法,而且在创建表的同时导入数据。不过在使用这个方法的时候,仍然有些内容需要引起数据库管理员的注意。(SQL Server数据库中成批导入数据的几个常用方法) 如上图,就是笔者利用CTAS建立表格的过程。其中AD_USER是原表,而AD_USER_CTAS是利用CTAS方法建立的表。利用...原创 2009-08-21 15:55:08 · 849 阅读 · 0 评论 -
SQL连接驱动表帖子
http://www.itpub.net/viewthread.php?tid=144375&extra=&page=1 SQL语句的执行速度,可以受很多因素的影响而变化。但主要的影响因素是:驱动表、执行操作的先后顺序和索引的运用。可以由很多不同的方法间接地改变这些因素,以达到最优的执行速度。这里主要探讨当对多个表进行连接查询时应遵循的优化原则: (1)...原创 2009-08-24 10:08:07 · 301 阅读 · 0 评论 -
查询--驱动表
查询中何为驱动表阿??请问这句话怎么理解啊?楼主goldtogo(jinhao)2002-12-06 09:36:27 在 Oracle / 基础和管理 提问3.1 SQL语句的优化 SQL语句的执行速度,可以受很多因素的影响而变化。但主要的影响因素是:驱动表、执行操作的先后顺序和索引的运用。可以由很多不同的方法间接地改变这些因素,以达到最优的执行速度。这里主要探讨当对多...原创 2009-08-24 10:58:50 · 136 阅读 · 0 评论 -
push_subq提示
PUSH_SUBQ 可以用来控制子查询的执行 这个是PUSH_SUBQ 的本意我那个例子的意思是说:PUSH_SUBQ 本质上是个CBO的hints(当然RBO也提不上hints)由于PUSH_SUBQ 的引入就是为了来解决unnesting的某些不足所以在不同的版本上,这个hints发挥的作用也有所不同了. 8i上这个提示的作用更接近本原: $ sqlplus "...原创 2009-09-06 12:17:11 · 271 阅读 · 0 评论 -
关于绑定变量的一点心得
我们一直在告诉开发人员一定要使用绑定变量,而你是否真正了解绑定变量的有缺点呢?绑定变量可以减少SQL分析,节约共享池的空间。但是在某些情况下,使用绑定变量也是有缺点的。比如说,如果使用绑定变量,那么优化器就会忽略直方图的信息,在生成执行计划的时候可能不够优化。另外一个有趣的问题是,如果一张表有几十万条记录,而某个字段有2个值,那么如果在这个字段上建一个索引,那么这个索引可能起作用吗?不能?...原创 2009-09-08 10:03:10 · 118 阅读 · 0 评论 -
/*+ precompute_subquery */子查询中的提示
QUOTE:--------------------------------------------------------------------------------select * from tab1 where tab1.object_name in(select /*+ precompute_subquery */ object_name from tab2 where owner='...原创 2009-09-08 10:51:40 · 155 阅读 · 0 评论 -
sql 语句中or条件之种种情况
sql 语句中or条件之种种情况1、相同字段or条件,转换为inlist 走index range scanSQL> select * from test_or a 2 where a.object_id=20 or a.object_id=21;执行计划----------------------------------------------------------Plan...原创 2009-09-08 10:55:02 · 456 阅读 · 0 评论 -
观察analyze table compute statistics 都对什么对象统计了信息
观察analyze table compute statistics 都对什么对象统计了信息 analyze table compute statistics = analyze table compute statistics for table for all indexes for all columns; 比analyze table compute statistics fo...原创 2009-09-08 12:52:46 · 519 阅读 · 0 评论 -
Oracle语句优化规则汇总(一)
Oracle sql 性能优化调整 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS...原创 2009-08-19 15:07:05 · 131 阅读 · 0 评论 -
几种索引扫描方式
1)索引唯一扫描 如果查询时是通过unique或primary key约束来保证只返回一条数据,那么优化器就会选择索引唯一扫描,这是访问一条数据的最快方式。2)索引范围扫描索引键非唯一,当遇到如下条件时会使用索引范围扫描:1.col=:b12.col<:b13.col>:b13)索引降序范围扫描与2)中的情况相同,只不过2)默认是按照升序进行查找的,而这里是...原创 2009-08-19 14:47:51 · 269 阅读 · 0 评论 -
[译] PL/SQL 格式化指南 (PL/SQL Formatting Guide)
最近一直在修改以前同事写的Oracle存储过程,由于编码不规范,修改起来相当费神,于是乎,翻译了这篇 PL/SQL Formatting Guide (Oracle PL/ SQL by Example,Appendix A),费了九牛二虎之力,终于翻译完了,也终于知道自己的英语有多烂了,呜呜。声明:原创翻译,不足之处请多多指正,转载请注明出处!一、大小写 就像在SQL中一样,PL /...原创 2009-11-30 17:03:37 · 251 阅读 · 0 评论 -
Oracle RBO、CBO简介
Rule Based Optimizer(RBO)基于规则Cost Based Optimizer(CBO)基于成本,或者讲统计信息ORACLE 提供了CBO、RBO两种SQL优化器。CBO在ORACLE7 引入,但在ORACLE8i 中才成熟。ORACLE 已经明确声明在ORACLE9i之后的版本中(ORACLE 10G ),RBO将不再支持。因此选择CBO 是必然的趋势。CBO和 RB...原创 2009-08-17 14:59:11 · 112 阅读 · 0 评论 -
30个Oracle语句优化规则详解
1.选用适合的Oracle优化器Oracle的优化器共有3种:a.RULE(基于规则)b.COST(基于成本)c.CHOOSE(选择性)设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE、COST、CHOOSE、ALL_ROWS、FIRST_ROWS。你当然也在SQL句级或是会话(session)级对其进行覆盖。为了使用...原创 2009-08-17 15:01:45 · 79 阅读 · 0 评论 -
Oracle HINT的常见用法
提示(hint)从Oracle7中引入,目的是弥补基于成本优化器的缺陷。提示通常用来改变SQL执行计划,提高执行效率。使用提示需要遵循的原则:1)仔细检查提示语法。尽量使用完整注释语法/*+ hint */2)使用表别名。如果在查询中指定了表别名,那么提示必须也使用表别名。例如:select /*+ index(e,dept_idx) */ * from emp e;3)不要在提示中使...原创 2009-08-17 15:02:29 · 97 阅读 · 0 评论 -
索引什么时候不工作
首先要声明两个知识点: (1)RBO&CBO。 Oracle有两种执行优化器,一种是RBO(Rule Based Optimizer)基于规则的优化器,这种优化器是基于sql语句写法选择执行路径的;另一种是CBO(Cost Based Optimizer)基于规则的优化器,这种优化器是Oracle根据统计分析信息来选择执行路径,如果表和索引没有进...原创 2009-08-17 15:18:58 · 71 阅读 · 0 评论 -
三招让Oracle表列管理更加简单
Oracle数据库是目前为止最复杂的一个数据库之一。也正是这种复杂性,让Oracle数据库能够面对企业各种各样的需求。不过大部分时候,数据库管理员掌握一些技巧,可以让数据库维护工作变得简单。 Oracle数据库是目前为止最复杂的一个数据库之一。也正是这种复杂性,让Oracle数据库能够面对企业各种各样的需求。不过大部分时候,数据库管理员掌握一些技巧,可以让数据库维护工作变得简单。笔者这里...原创 2009-08-17 15:20:29 · 82 阅读 · 0 评论 -
oracle count计数的优化
在9i,我们知道count(*)的时候,如果表上有pk,那count(*) 一定会走pk的。count(column) ,如果column指定not null,那count(column) 可以走上索引(通过试验证明,必须还要加上index提示才能走上索引)。但如果列上有空值,不管如何加提示,都走不上列上的索引(组合索引的非引导列除外) count是否应该走索引,主要取决于cou...原创 2009-08-17 15:21:17 · 163 阅读 · 0 评论 -
利用Oracle内置分析函数进行高效统计汇总
分析函数是Oracle从8.1.6开始引入的一个新的概念,为我们分析数据提供了一种简单高效的处理方式。在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现在只要一条简单的SQL语句就可以实现了,而且在执行效率方面也有相当大的提高。下面我将针对分析函数做一些具体的说明。分析函数的一般格式是函数名(参数列表) over ([partition by 字段名...原创 2009-08-17 15:22:33 · 226 阅读 · 0 评论 -
RBO下,oracle如何选择驱动表
--目的:弄清楚RBO下,oracle如何选择驱动表--连接到部门测试机器10.188.239.68进行测试操作CONN CRM1/CRM1@TEST--********************************************************--1测试环境说明--****************************************************...原创 2009-08-17 16:16:18 · 246 阅读 · 0 评论 -
and_equal,index_join,index_combine
and_equal,index_join,index_combine这三种都是oracle利用索引关联获得数据的方法,三者的目的都是为了最大限度的利用索引,减少回表的代价.但是三者的实现方法是有区别的,下面一一来分析.and_equal:这种方式需要查询条件里面包括所有索引列,然后取得每个索引中得到的rowid列表,然后对这些列表做merge join,过滤出相同的rowid后再去表中获取数据...原创 2009-08-18 10:16:36 · 148 阅读 · 0 评论 -
ORALCE /*+NO_EXPAND*/ 含义
求教 ORALCE /*+NO_EXPAND*/ 含义 是什么求教 ORALCE /*+NO_EXPAND*/ 含义 是什么 谢谢网上的解释是 "对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展."但是什么是阻止其基于优化器对其进行扩展??有什么具体例子么,迷惑中-------------------------------------...原创 2009-08-18 11:02:42 · 712 阅读 · 0 评论 -
列定义是否为空对COUNT(*)操作索引选择的影响
SQL> desc test; Name Null? Type ----------------------------------------- -------- ---------------------------- OBJECT_NAME VARCHAR2(128) OBJECT_ID NUMBER============...2009-08-19 11:28:35 · 159 阅读 · 0 评论 -
oracle不使用索引原因定位
较典型的问题有:有时,表明明建有索引,但查询过程显然没有用到相关的索引,导致查询过程耗时漫长,占用资源巨大,问题到底出在哪儿呢?按照以下顺序查找,基本上能发现原因所在。查找原因的步骤首先,我们要确定数据库运行在何种优化模式下,相应的参数是: optimizer_mode 。可在 svrmgrl 中运行“ show parameter optimizer_mode" 来查看。 ORACLE V...原创 2009-08-19 11:36:53 · 140 阅读 · 0 评论 -
Oracle's Query Transformer
Oracle's Query Transformer Oracle优化器的工作主要分成3步。。。Oracle优化器的工作主要分成3步: 首先, 优化器会尝试把复杂的SQL语句转化较为简单的SQL语句, 通常倾向于转化为表的连接方式. 然后, 优化器会对依据统计信息对SQL语句进行估量, 这些估量主要包括3个方面: Selectivity, Cardinalit...原创 2009-09-09 17:56:08 · 120 阅读 · 0 评论