SQL / PLSQL高级
liaoyuanzi
这个作者很懒,什么都没留下…
展开
-
使用优化器性能视图获取SQL语句执行环境
Oracle SQL语句的运行环境分为多个不同的层次,主要包括实例级别,会话级别,语句级别,其优先级依次递增。即语句级别的执行环境具有最高的优先权,会话级别次之,实例级别最低。反过来,实例级别的环境设置影响全局,而会话级别的则影响当前会话,语句级别的设置当然也就只影响当前语句。由此可知,运行环境中每一个环节的参数都对最终的数据库性能或所执行的SQL语句有直接的影响。因此在对数据库优化或转载 2012-08-31 17:11:55 · 498 阅读 · 0 评论 -
Oracle分页查询格式8
Oracle10g的新功能GROUP BY STOPKEY,使得Oracle10g解决了上一篇文章中提到的GROUP BY操作无法分页的问题。在10g以前,Oracle的GROUP BY操作必须完全执行完,才能将结果返回给用户。但是Oracle10g增加了GROUP BY STOPKEY执行路径,使得用户在执行GROUP BY操作时,可以根据STOPKEY随时中止正在运行的操作。这转载 2012-09-08 11:24:45 · 432 阅读 · 0 评论 -
Oracle分页查询格式10
上一篇文章已经介绍了利用分析函数来进行分页的方法,总的来说,除非分页到了最后部分,利用分析函数进行分页的效率还是可以的。综合来说,除了SQL嵌套可以少写一层外,并没有什么特别的优点来代替标准分页函数的写法。不过上一篇测试所有的数据都是通过全表扫描得到的,如果在排序字段上存在索引,这两种不同的分页查询效率如何呢,还是继续进行测试:SQL> ALTER TABLE T MODI转载 2012-09-08 11:26:53 · 483 阅读 · 0 评论 -
分页查询的排序问题
最近看了数据仓库中分析函数的部分,发现RANK等函数还有基于假设条件进行查询的功能。对于RANK分析函数的功能,大多数人都不陌生,这个函数可以返回排名,看一个简单的例子:SQL> CREATE TABLE T AS2 SELECT ROWNUM ID, OBJECT_NAME, OBJECT_TYPE3 FROM USER_OBJECTS;Tab转载 2012-09-08 11:35:44 · 613 阅读 · 0 评论 -
DISTINCT和GROUP BY的区别
其实二者没有什么可比性,但是对于不包含聚集函数的GROUP BY操作来说,和DISTINCT操作是等价的。不过虽然二者的结果是一样的,但是二者的执行计划并不相同。在Oracle9i中:SQL> SELECT * FROM V$VERSION;BANNER-------------------------------------------------转载 2012-09-08 11:52:56 · 661 阅读 · 0 评论 -
Oracle分页查询语句5
在文章的最后看一下ORDER BY STOPKEY和ORDER BY在翻页查询的最后几页的性能差异:SQL> CREATE TABLE T AS SELECT A.* FROM DBA_OBJECTS A, DBA_USERS B, TAB;表已创建。SQL> SELECT COUNT(*) FROM T;COUNT(*)----------458064转载 2012-09-08 11:22:33 · 385 阅读 · 0 评论 -
在Oracle中进行大小写不敏感的查询
在Oracle中,命令和对象名称都是大小写不敏感的,因为Oracle在处理语句时,将所有的名称和命令全部转化为大写。但是对于字符串中的字符,无论是比较还是排序,都是大小写敏感的。这在Oracle是默认方式,但不是唯一的方式。下面看一个简单的例子:SQL> CREATE TABLE T (NAME VARCHAR2(30));表已创建。SQL> I转载 2012-09-08 11:37:21 · 1072 阅读 · 0 评论 -
FIRST_ROWS优化模式语言排序模糊匹配问题
标题比较长,不过只有这样才能把问题描述清楚。问题详细描述为,在FIRST_ROWS优化模式下,将会话排序和比较方式设置为语义模式,即忽略大小写模式,对字段进行LIKE模糊查询,可能导致错误的结果。关于大小写不敏感的查询的详细描述,可以参考:http://yangtingkun.itpub.net/post/468/460324下面直接看问题的现象:SQL转载 2012-09-08 11:37:56 · 517 阅读 · 0 评论 -
Oracle分页查询格式
本文简单讨论一下包含GROUP BY、DISTINCT、UNIQUE等操作的分页查询语句。由于包含上述的集操作,Oracle必须处理完所有的数据才会将结果全部的提交给用户。即使包含了ROWNUM,Oracle也只是在处理完所有的数据之后,将需要的数据进行返回。不过并不是说前面提到的标准写法在这里没有意义,而是最耗时的部分已经处理完毕。通过ROWNUM来限制意义不大。虽然标准转载 2012-09-08 11:23:31 · 417 阅读 · 0 评论 -
Oracle分页查询格式6
前面提到了对于集操作和聚集操作,使用标准的分页函数没有太大的意义,下面通过几篇文章专门讨论集操作和聚集操作的情况。这里首先讨论集操作的情况。当查询需要分页时,大多数情况都会包含排序操作,因为如果缺少排序操作,很难保证分页返回的数据是连续不重复的。因此这里只考虑包含排序的情况:SQL> CREATE TABLE T AS SELECT * FROM DBA_TABLES;转载 2012-09-08 11:23:02 · 474 阅读 · 0 评论 -
Oracle分页查询格式3
前面的各种例子已经说明了分页查询语句的标准写法所带来的性能提升。这里简单总结一下,并简单的说明分页查询语句在何时无法带来性能提升。分页查询语句之所以可以很快的返回结果,是因为它的目标是最快的返回第一条结果。如果每页有20条记录,目前翻到第5页,那么只需要返回前100条记录都可以满足查询的要求了,也许还有几万条记录也符合查询的条件,但是由于分页的限制,在当前的查询中可以忽略这些数据,转载 2012-09-08 11:21:22 · 446 阅读 · 0 评论 -
ROLLUP 与 CUBE 运算符的使用
对于数据的汇总,是数据库经常用到的任务之一,除了我们通常使用的GROUP BY分组配合聚合函数对数据汇总,以及使用UNION ALL 对数据汇总之外,SQL还提供了 GROUP BY Col1,Col2.. WITH CUBE | ROLLUP,以及COMPUTE BY 等汇总方式,本文主要介绍了使用CUBE 与ROLLUP运算符来实现数据的分级汇总。IF OBJECT_ID('tb'转载 2012-09-04 17:55:43 · 395 阅读 · 0 评论 -
ROLLUP与CUBE运算符
--=============================================-- SQL 基础--> ROLLUP与CUBE运算符实现数据汇总--============================================= 在使用ROLLUP与CUBE运算符实现数据的汇总是,Oracle与SQL Server使用了不同的写法,但其实质是一样的转载 2012-09-04 17:55:16 · 616 阅读 · 0 评论 -
Oracle的分析函数(解析函数)说明
一。解析函数的说明分析函数是甲骨文8中引入的一个概念,为我们分析数据提供了一种简单高效的处理方式。 官方对分析函数的说明如下:分析功能计算,总价值基础上的一组行。它们的不同之fromaggregate函数,因为它们为每个组返回多行。groupof行被称为一个窗口,并定义:费analytic_clause。对于每一行,行是一个滑动窗口defined.The窗口中确定用转载 2012-09-06 10:11:39 · 994 阅读 · 0 评论 -
Oracle 行列转换 总结
行列转换包括以下六种情况: 1. 列转行 2. 行转列 3. 多列转换成字符串 4. 多行转换成字符串 5. 字符串转换成多列 6. 字符串转换成多行 首先声明,有些例子需要如下10g及以后才有的知识: A. 掌握model子句, B. 正则表达式 C. 加强的层次查询1、列转行CREATE TABLE t_co转载 2012-09-06 10:09:44 · 384 阅读 · 0 评论 -
Oracle分页查询语句4
这篇文章通过例子说明分页查询使用的NESTED LOOP操作,在分页查询翻到最后几页时的性能问题:SQL> CREATE TABLE T AS SELECT * FROM DBA_USERS;表已创建。SQL> CREATE TABLE T1 AS SELECT * FROM DBA_SOURCE;表已创建。SQL> ALTER TABLE T ADD CO转载 2012-09-08 11:22:02 · 463 阅读 · 0 评论 -
Oracle分页查询格式9
Oracle从8i推出了分析函数,9i中分析函数进一步发展,而且已经很稳定了。利用分析函数的功能,一样可以实现分页的功能。首先还是构造一张大表,作为分页查询的测试表:SQL> CREATE TABLE T AS 2 SELECT /*+ NO_MERGE(A) NO_MERGE(B) */ *3 FROM DBA_SEQUENCES A, DBA_OBJECTS B转载 2012-09-08 11:26:15 · 532 阅读 · 0 评论 -
Oracle分页查询格式11
前几天有个网友问到,为什么这个系列的大部分例子中都没有包括查询条件。其实分页只是一种标准的写法,分页嵌套的业务SQL才是实现查询功能的关键,而这部分可能会很简单,也可能会复杂的很。因此很难模拟各种复杂的业务SQL在分页中的表现。如果要分析分页查询,只能依旧不同业务SQL的特性进行分类,比如:包括GROUP BY操作、包含UNION ALL查询、通过全表扫描获取记录、通过索引扫描获取记录转载 2012-09-08 11:27:22 · 658 阅读 · 0 评论 -
Oracle分页查询语句2
最后的例子说明内部循环包含排序的情况:SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS;表已创建。SQL> CREATE INDEX IND_T_OBJECT_NAME ON T (OBJECT_NAME);索引已创建。SQL> ALTER TABLE T MODIFY OBJECT_NAME NOT NULL转载 2012-09-08 11:12:32 · 451 阅读 · 0 评论 -
高效SQL语句必杀技
No SQL,No cost. SQL语句是造成数据库开销最大的部分。而不良SQL写法直接导致数据库系统性能下降的情形比比皆是。那么如何才能称得上高效的SQL语句呢?一是查询优化器为当前的SQL语句生成最佳的执行计划,保证数据读写使用最佳路径;二是设置合理的物理存储结构,如表的类型,字段的顺序,字段的数据类型等。本文主要描述如何编写高效的SQL语句并给出示例。下面的描述主要分为三个部分,一转载 2012-09-19 17:54:17 · 453 阅读 · 0 评论