Oracle SQL 开发
文章平均质量分 67
linwaterbin
当时明月在,曾照彩云归。
展开
-
复合索引的列顺序判断
复合索引最令人困惑的当属索引列的顺序,不仅依赖于使用该索引的查询,更需考虑排序和分组。前段时候我发了个帖子:where条件顺序和复合索引字段顺序。感兴趣的朋友不妨参与讨论。今天我提个自己的观点。在应用开发阶段,【选择性】是我们首要考虑因素,请看简图:当出现sql性能问题时,你可能需要注意以下几个:1. 随机IO2. 排序(order by)3. 分组(group by or distinct)这时原创 2014-04-27 19:04:44 · 12344 阅读 · 1 评论 -
浅析count(1) count(*) count(col)的区别和性能
count(1)和count(*)没有任何区别(执行计划和统计信息),而且都是统计所有行 count(col)统计col列不为空的记录,如果有索引,不管col是否为空,都能走索引,没有索引就无法走 测试 hr@ORCL> select count(1) from t; Executio原创 2013-02-04 15:46:23 · 4085 阅读 · 0 评论 -
深入理解Oracle索引(3):唯一索引和ROWID
索引都会包含rowid来定位到具体的位置,但是唯一索引不会用rowid来作为“索引键”的一部分 比如在列col1上建立非唯一索引,则其索引键是col1| rowid,这样索引键就唯一了,但唯一索引不会在列上加上rowid构成索引键 测试:SQL> conn / as sysdba已连接。SQL> create table t as select * fro原创 2013-02-03 00:18:28 · 4728 阅读 · 0 评论 -
深入理解Oracle索引(2):INDEX UNIQUE SCAN,INDEX FULL SCAN和INDEX FAST FULL SCAN
㈠ INDEX UNIQUE SCAN 如果表上有唯一索引, 搜索索引列时会用上INDEX UNIQUE SCAN 原来Index Unique Scan和Index Range Scan在B Tree上的搜索路径是一样的 只是Index Unique Scan在找到应该含有要找的Index Key的block后便停止了搜索,因为该键原创 2013-01-30 22:19:37 · 10366 阅读 · 1 评论 -
深入理解Oracle表(5):三大表连接方式详解之Hash Join的定义,原理,算法,成本,模式和位图
Hash Join只能用于相等连接,且只能在CBO优化器模式下。相对于nested loop join,hash join更适合处理大型结果集 Hash Join的执行计划第1个是hash表(build table),第2个探查表(probe table),一般不叫内外表,nested loop才有内外表 Hash表也就是所谓的内表,探查表所谓的外表 两者的执行原创 2013-01-30 00:16:38 · 19147 阅读 · 0 评论 -
深入理解Oracle表(4): 表(Table)和段(Segment)之间是什么关系
表是段,但段不一定是表,段还有index段、undo段、分区之类的 具体如下: 首先,要清楚它们的概念:表是逻辑对象;段是物理存储对象 然后,再看它们之间的关系: ① 段的存在,并不是依赖于表的。建立一些其它逻辑对象也会会创建段,如索引、物化视图 ② 一张普通表(堆组织表)对应一个段 ③ 表的建立,并不意味着段的创建,如临时原创 2013-01-29 12:45:12 · 4877 阅读 · 1 评论 -
索引的Selectivity
选择性,表示一个行集当中的一小部分行 这个行集可以是基表,视图,或者一个join的结果集,或者一次group by操作 选择性受限于查询谓词,比如,last_name='Smith',或者一个联合谓词,比如,last_name='Smith' ADN job_type='Clerk' 一个谓词就像一个过滤器,从行集当中过滤掉某些行 因此,一个谓词选择原创 2013-01-27 22:07:41 · 3601 阅读 · 0 评论 -
深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join
关系数据库技术的精髓就是通过关系表进行规范化的数据存储 并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理 这里Think愿意和大家一起来学习分享Oracle的三大表连接技术 在早期版本,Oracle提供的是nested-loop join,两表连接就相当于二重循环,假定两表分别有m行和n行 如果内循环是全表扫描,时间复杂度原创 2013-01-28 00:33:15 · 7209 阅读 · 1 评论 -
【ROLLUP】Oracle分组函数之高效的ROLLUP
㈠ 初始化实验坏境 hr@ORCL> create table rollup_test as 2 select e.department_id,j.job_title,e.first_name,e.salary 3 from employees e,jobs j 4 where e.job_id=j.job_id;Table creat原创 2013-01-05 22:59:08 · 2093 阅读 · 0 评论 -
数字转换为英文的函数
sys@ORCL> select to_char(to_date('1314','J'),'Jsp') as "I love 1314" from dual;I love 1314-----------------------------------One Thousand Three Hundred Fourteen 注释: j就是范围在1--5373484之间原创 2013-01-03 18:26:59 · 1680 阅读 · 0 评论 -
深入理解Oracle索引(1):INDEX SKIP SCAN 和 INDEX RANGE SCAN
㈠ Index SKIP SCAN 当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS Skip scan会探测出索引前导列的唯一值个数,每个唯一值都会作为常规扫描的入口,在此基础上做一次查找,最后合并这些查询 例如:表employees (sex, employee_id,原创 2013-01-28 21:49:25 · 30724 阅读 · 0 评论 -
深入理解Oracle索引(5):反向索引的定义、缺点和适用场景
㈠ 定义 建立一个反向索引将把每个列的键值(each column key value)按字节反向过来,对于组合键,列的顺序被保留,但每个列的字节都作了反向 例如: 表的某一列内容 …… 1234 1235 1236 1237原创 2013-02-24 19:13:11 · 11178 阅读 · 0 评论 -
Oracle 产生序列的 6 种方法
方法一:sys@ORCL> select level from dual connect by level<=5; LEVEL---------- 1 2 3 4 5方法二:sys@ORCL> select rownum from dba_objects where rownum<原创 2013-06-19 23:51:46 · 2946 阅读 · 2 评论 -
to_char 和 to_date 经验分享
㈠ 比较下面两种写法: to_char(start_time,'yyyy-mm-dd hh24:mi:ss')='2013-06-06 16:18:30' 和 start_time=to_date('2013-06-06 16:18:30','yyyy-mm-dd hh24:mi:ss') 任何时候都推荐使用后者!!原创 2013-06-06 16:53:37 · 2335 阅读 · 2 评论 -
深入理解Oracle索引(14):Composite Index 两大原理解析
声明:虽然题目是Oracle、但同样适合MySQL InnoDB索引 在大多数情况下、复合索引比单字段索引好 很多系统就是靠新建一些合适的复合索引、使效率大幅度提高 复合索引比单字段索引复杂、有两个原则需把握:前缀性和可选性 但是、可叹的是、国内很多IT系统开发人员没有意识到应该优先设计复合索引 更没有充分理解复合索引的前缀性和可选性这两个重要原则原创 2013-05-21 12:35:25 · 4997 阅读 · 0 评论 -
《Oracle Database 11g & MySQL 5.6开发手册》试读有感
大数据浪潮汹涌袭来、一场新的信息技术革命即将开始。“春江水暖鸭先知”,作为数据库从业人员的我、体会尤为深刻 然而、无论是Oracle的 EXADATA 还是MySQL的Scale Out、或者NoSQL、都有其各自的适用场景、没有优劣之分 数据的大集中还是大分布、这取决于公司的财务、技术支持、氛围、需求等等、 看下2013年4月份各数据库在市场的占用率: 其次谈谈Oracle收购MySQL、很多原创 2013-05-06 11:33:38 · 2353 阅读 · 0 评论 -
深入理解 Oracle 分区(3):分区表和分区索引概述
㈠ 分区表技术概述 ⑴ Range 分区 ① 例子 create table t (...列定义...) partition by range (week_num) (partition p1 values less than (4)tablespace data0,原创 2013-04-22 19:15:06 · 3227 阅读 · 0 评论 -
深入理解 Oracle 分区(2):分区方案中常见问题探讨
分区方案设计和实施是一门追求综合平衡、充满辩证统一的哲学、 也是经验和技术不断积累的艺术 然而、实际项目中、却漏洞频出、导致海量数据顷刻坍塌 ㈠ 目标方面的误区 ① 问题分析 在很多分区设计方案、其指导思想往往只考虑部分目标 特别是过分在意设计对性能的需求 而对分区在数据生命周期、数据备份恢复原创 2013-04-22 12:32:22 · 2572 阅读 · 0 评论 -
深入理解 Oracle 分区(1):如何实施和评估分区
虽然本博文旨在引导大家生产环境如何建立分区 但千万别被一些所谓的设计指南、特别是一些绝对值建议而把自己作茧自缚 生产环境当慎独! 不过、照葫芦画瓢、总比没葫芦乱画一通要强吧 那么、我们从分区索引和分区表来展开 ㈠ 分区索引的设计指南 ① 如果表分区字段正好是索引字段或者其前缀、例如:t表分区字段是a、 则a正好是索引字段(a原创 2013-04-22 10:14:49 · 5850 阅读 · 0 评论 -
深入理解Oracle索引(7):用实验数据观察从B-tree索引→复合索引→Bitmap索引所消费的CPU和I/O
环境:sys@ORCL> !sqlplus -vSQL*Plus: Release 10.2.0.1.0 - Productionsys@ORCL> !uname -aLinux Think 2.6.18-308.el5xen #1 SMP Fri Jan 27 17:59:00 EST 2012 i686 i686 i386 GNU/Linuxhr@ORCL> conn sh/sh原创 2013-02-24 21:37:23 · 2815 阅读 · 0 评论 -
深入理解Oracle索引(6):在实践中初步认识3大索引的使用场景
㈠ 某表的一列重复值很多,基数很小时,应该建立什么索引? --创建Bitmap Index,具体原理参见:B-Tree索引与Bitmap索引的锁代价的比较 例如: create bitmap index idx_bm_product on products(list_price) tablespace users;原创 2013-02-24 20:21:51 · 2311 阅读 · 0 评论 -
内连接和等值连接的区别
内连接就是满足连接条件的结果集,这是相对于外连接而言。外连接即使找不到满足条件的记录,另一方的记录还是要输出INNER JOIN可以不等:select * from t1 inner join t2 on t1.id从集合论角度看:等值连接是内连接的子集原创 2013-01-01 23:43:44 · 5470 阅读 · 0 评论 -
Oracle SQL编写优化总结《一》
㈠ 选用合适的Oracle 优化器 缺省值: 9i默认是choose 10g默认是all_rows sys@EMREP> show parameter optimizer_mode NAME TYPE VALUE原创 2012-12-04 22:13:25 · 1619 阅读 · 0 评论 -
oracle 开发误区探索《二》
接上一篇。 ③ 堤防DDL提交事务 DDL伪代码展示: begin commit; DDL-statement commit; Exception when others then rollback; end;原创 2012-10-29 19:53:48 · 1401 阅读 · 0 评论 -
oracle约束学习(1)unique和check
有人说,没有索引, 拿什么来保证约束?姑且不论这话的对错,但约束的实现(除了not null),很多都是通过索引来快速定位约束的地方。unique约束会自动建立索引,pk也是。也因此,约束的很多问题总是和索引缠绵一起。 相关视图: dba_constraints dba_cons_columns not n原创 2012-08-12 19:48:52 · 4785 阅读 · 0 评论 -
图解oracle 之从客户端到服务端的sql追击
图2 图3 图4 图5 图6 补充图片:原创 2012-07-26 00:25:30 · 4422 阅读 · 2 评论 -
你也被to_date()函数欺骗了吗?
我们可以用to_date函数来构造自己想要的任何时间。当省略了HH,MI,SS时,oracle缺省置为0,即:取整到日。当省略了DD时,oracle缺省置为1,即:取整到月。当省略了MM时,oracle会取整到年吗?我们都会惯性的认为:会。然,非也!oracle不会取整到年,他会取整到当前月!! 下面我们来实验一下。sys@ORCL> select to_date('2012-7-2原创 2012-07-27 19:45:34 · 3151 阅读 · 0 评论 -
dbms_stats包的使用说明书
dbms_stats包下面一共有40多个存储过程. 对执行计划的生成非常重要。常见的有: 分析数据库(包括所有的用户对象和系统对象):gather_database_stats 分析用户所有的对象(包括表、索引、簇):gather_schema_stats 分析表:gather_table_stats 分析索引:gather_index_stats原创 2012-08-09 11:49:00 · 1952 阅读 · 0 评论 -
oracle merge从9i到10g的增强
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。 下面看个具体例子:hr@ORCL> select * from p; ID NAME---------- --------原创 2012-08-05 20:16:41 · 1906 阅读 · 0 评论 -
oracle sql基础学习篇《一》
每个RDBMS都基于标准sql走出了属于自己的sql特色。oracle也不例外。现起,我们来学习oracle sql。 学习sql,于开发者,实现优秀的业务逻辑;于管理者,完成数据库的调优。 oracle sql可分: a)select b)DML:update,insert,delete,merge c)DDL:create,alter,drop d)DC原创 2012-07-16 20:28:28 · 3038 阅读 · 0 评论 -
韩顺平玩转oracle之pl/sql听课笔记《三》
有些惭愧,距离第2次听课笔记远了。这一讲主要是关于函数,包,还有变量的解释。 1 函数和过程的区别 1)函数:返回特定值,通常是一个; 过程:执行特定操作 2)建立函数时: 在函数头须包含return子句 例如; return number is think_salary number(7,2) 在函数体也须包含return语句原创 2012-06-22 18:21:01 · 2326 阅读 · 0 评论 -
韩顺平玩转oracle之pl/sql听课笔记《二》
这个是第25讲,主要关于块和过程的基础性了解。1 最简单的块之一: set serveroutput on --打开输出选项,倘若为off,则put_line()就没有输出 begin dbms_output.put_line('hello'); end; 注释:dbms_output是oracle提供的包。包内含过程和函数。put_line就是dbms原创 2012-06-14 16:55:00 · 2108 阅读 · 0 评论 -
韩顺平玩转oracle之pl/sql听课笔记 《一》
要把程序做得有灵魂 By think1 pl/sql是什么过程,函数,触发器是pl/sql编写的。 过程,函数,触发器是在oracle的system表空间里面。 Pl/sql是非常强大的数据库过程化语言 过程,函数可以在java程序中调用 2为什么要学pl/sql 1)提高运用程原创 2012-06-11 15:37:35 · 2628 阅读 · 0 评论 -
oracle函数之case和decode的用法区别及性能比较
在oracle世界,你可以使用: 1)case表达式 或者 2)decode函数 来实现逻辑判断。Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能。而CASE是9i以后提供的语法,这个语法更加的灵活,提供了IF THEN ELSE的功能。 case表达式 case表达式,可分两种,简单和搜原创 2012-08-01 12:59:23 · 36031 阅读 · 0 评论 -
oracle开发注意事项小结
1)统计信息里面,有两行和性能有关。 15 SQL*Net roundtrips to/from client 198 rows processed 第一行表示,从buffer cache到PGA的结果集的往返次数 第二行表示,访问到的数据块里面的行的个数 计算: SQL*Net roundtrips=[ rows processed/arraysize]+2,当且仅当原创 2012-08-05 11:00:56 · 2102 阅读 · 2 评论 -
oracle 开发误区探索《一》
环境:sys@ORCL> select * from v$version where rownum=1;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prodsy原创 2012-10-29 15:05:15 · 1619 阅读 · 0 评论 -
用等比数列解析伪列level的另一个作用
我们都知道,level是个伪列,代表当前节点所在的层级;对根节点来说,level返回1;根节点到子节点返回2,以此类推。 借助level,我们可以控制对表的扫描次数。第一次扫描得出的结果集的level都是1,第二次扫描的结果集的level都是2,依此类推。 实验环境:SQL> create table test as select ename from emp where rownum原创 2012-10-16 21:19:51 · 1355 阅读 · 0 评论 -
oracle 层次查询
1 定义: 层次查询使用树的遍历,走遍含树形结构的数据集合,来获取树的层次关系报表的方法 树形结构的父子关系,你可以控制: ① 遍历树的方向,是自上而下,还是自下而上 ② 确定层次的开始点(root)的位置 层次查询语句正是从这两个方面来确定的,start with确定开始点,c原创 2012-09-19 10:39:20 · 3803 阅读 · 0 评论 -
oracle insert的扩展
向一个表发散弹枪: ⑴ insert into table_name [(column[,column...])] select_statement 每次只能插入一个表,但性能上比写多条insert语句要高。另外,oracle还提供create table table_name as select ...,as不可少!实现直接创建并且插入表,原创 2012-09-19 01:06:06 · 2990 阅读 · 1 评论 -
oracle with子句
以例子学习with:with--查询部门和部门的总薪水 dept_costs as ( select d.department_name,sum(e.salary) dept_total from departments d,employees e where d.dep原创 2012-09-18 10:17:55 · 3351 阅读 · 0 评论