- 博客(16)
- 资源 (8)
- 收藏
- 关注
原创 Oracle 查看收集统计信息
-- Start统计信息相当于情报,对 Oracle 至关重要,如果统计信息不准确,Oracle 就会做出错误的判断。通常,Oracle 会在每天固定时间段自动维护统计信息。但是对于某些表,这是远远不够的,如:某些表每天都需要清空,然后重新导入。这个时候,我们需要手动收集统计信息。-- 方法1: 使用 DBMS_STATS.GATHER_TABLE_STATS 手动收集存储过程DBM
2015-07-29 17:27:00 23824 1
原创 Oracle 查看执行计划
-- Start我们可以通过 EXPLAIN PLAN 语句生成执行计划,该语句把执行计划保存到一个叫做 PLAN_TABLE 的表中,我们可以通过查询这个表来查看执行计划。下面是一个简单例子。-- 生成执行计划EXPLAIN PLAN SET STATEMENT_ID = 'test'FORselect * from employees where employee_id <
2015-07-28 12:52:57 5877
原创 Oracle 查询优化器 -- 表连接方法
-- Start循环嵌套连接(Nested Loop Joins)首先,看看下面的 SQL 语句。SELECT e.first_name, e.last_name, e.salary, d.department_nameFROM hr.employees e, hr.departments dWHERE d.department_name IN ('Marketing', 'S
2015-07-21 17:33:12 2102
原创 Oracle 查询优化器 -- 访问路径
-- Start全表扫描(full table scans)不要以为全表扫描就一定慢, 全表扫描时, 由于数据块在磁盘中是连续的,Oracle 可以一次读取多个块来提高查询效率,至于多少个块,是由 DB_FILE_MULTIBLOCK_READ_COUNT 决定的。所以,如果你需要返回一个表的大部分数据,全表扫描要比索引扫描快。除此之外,Oracle 会自动对小表进行全表扫描,那什么是
2015-07-17 22:01:47 1328
原创 Oracle 查询优化器 -- 改写查询语句
-- Start当我们执行一条查询语句的时候,我们只告诉 Oracle 我们想要哪些数据,至于数据在哪里,怎么找,那是查询优化器的事情,优化器需要改写查询语句,决定访问路径(如:全表扫描,快速全索引扫描,索引扫描),决定表联接顺序等。至于选择哪种方式,优化器需要根据数据字典做出判断。那优化器如何改写查询语句呢?第一种方法叫合并视图,如果你的查询语句中引用了视图,那么优化器会把视
2015-07-10 17:17:25 2344
原创 Oracle 分开执行耗时操作
-- Start首先,我们看一个故事,联合利华引进了一条香皂包装生产线,结果发现这条生产线有个缺陷:常常会有盒子里没装入香皂。总不能把空盒子卖给顾客啊,他们只得请了一个学自动化的博士后设计一个方案来分拣空的香皂盒。博士后拉起了一个十几人的科研攻关小组,综合采用了机械、微电子、自动化、X射线探测等技术,花了几十万,成功解决了问题。每当生产线上有空香皂盒通过,两旁的探测器会检测到,并且驱动一只机械
2015-07-07 11:47:07 982
原创 Oracle 索引
-- Start不可否认,提高性能最直接有效的方式就是创建索引,正因为如此,好多人把它当做救命的良药,随意创建索引,殊不知维护索引的代价是非常大的。Oracle 官方给了一个大约的数字,维护一个索引所需要的代价大约是操作本身的 3 倍。另外,索引也有好多种类型,不同的索引适应的场景也不同。索引组织表(Index-Organized Tables)创建索引时,如何
2015-07-07 11:27:28 915
原创 Oracle 面向对象
-- Start我们都知道,传统数据库都是关系型数据库,随着 Java 和 面向对象的流行,Oracle也与时俱进,加入了面向对象的特性,最典型的就是嵌套表,嵌套表使查询变得复杂,同时它的性能也不如传统表好。--更多参见:Oracle SQL 优化精萃-- 声明:转载请注明出处-- Last edited on 2015-07-07-- Cr
2015-07-07 11:19:42 1078
原创 Oracle 避免使用动态 SQL
-- StartOracle 在执行动态 SQL 的时候,需要进行语法检查,安全检测,生成执行计划等等。所以,我们应该尽量避免使用动态 SQL,而应该多使用游标,存储过程等。--更多参见:Oracle SQL 优化精萃-- 声明:转载请注明出处-- Last edited on 2015-07-06-- Created by ShangBo on 201
2015-07-06 17:40:08 942
原创 Oracle 减少数据库访问次数
-- Start连接数据库是非常耗时的,虽然应用程序会采用连接池技术,但与数据库交互依然很耗时,这就要求我们尽量用一条语句干完所有的事,尤其要避免把 SQL 语句写在循环中,如果你遇到这样的人,应该毫不犹豫给他两个耳光。--更多参见:Oracle SQL 优化精萃-- 声明:转载请注明出处-- Last edited on 2015-07-06
2015-07-06 17:16:40 2347 1
原创 Oracle 视图
-- Start视图有好多优点,如它可以简化开发。但是有一点特别需要注意,最好不要使用多个视图做联合查询,因为优化器将很难优化这样的查询。--更多参见:Oracle SQL 优化精萃-- 声明:转载请注明出处-- Last edited on 2015-07-06-- Created by ShangBo on 2015-07-06-- En
2015-07-06 16:15:58 649
原创 Oracle 注释
-- StartOracle 支持单行注释和多行注释。--这是单行注释/*这是多行注释*/-- 更多参见:Oracle SQL 精萃-- 声明:转载请注明出处-- Last edited on 2015-07-04-- Created by ShangBo on 2015-07-04-- End
2015-07-04 22:40:57 5698
原创 Oracle DUAL 表
-- Start如果你想查看一下数据库的时间该怎么办呢?你需要执行一个 SQL 语句,但是 SQL 语句语法规定需要指定一个表,为此 Oracle 设计了一个只有一行一列的表 DUAL,我们可以使用这个表来执行一些不需要表的 SQL 语句。SELECT CURRENT_DATE FROM DUAL;--更多参见:Oracle SQL 精萃-- 声明:转载请注
2015-07-02 14:27:18 1109
原创 PL/SQL TABLE 表达式
-- Start如果你想把一个集合和一个表关联起来做查询,该怎么办呢?看看下面的例子吧。-- 定义类型CREATE OR REPLACE TYPE talbe_varchar15_type IS TABLE OF VARCHAR2(15);-- 由于 talbe_varchar15_type 集合只有一列且没有列名-- 我们使用 COLUMN_VALUE 伪列来引用单列 TAB
2015-07-02 14:16:38 973
原创 PL/SQL 命名规范
-- Start编写 PL/SQL 程序的时候,最好遵循一定的命名规范,这样代码可读性好。例如下面是一种命名规范。总之让别人从名字中很容易知道这是个什么东东。表 _*** trade_order临时表 _***# trade_order#视图 _***_view trade_order_view索引
2015-07-02 13:08:54 2266
原创 Oracle 并发更新大表
-- Start如果你有一个很大的表要更新,千万别想着一次搞定,如果你这么干了,你会发现需要很长时间,最后的结果也不一定成功,为什么呢? 第一,Oracle 需要锁定整个表,这个过程中极有可能发生死锁。第二,Oracle 需要更多的日志文件用于回滚。第三,一旦发生点小问题会导致一个老鼠害一锅汤。那该怎么办呢?答案是分段执行,少量多次并发执行,下面是一个简单的例子。DECLARE l
2015-07-01 16:31:26 6458
Korn Shell 精萃
2015-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人