没有合适的资源?快使用搜索试试~ 我知道了~
首页oracle SQL优化
oracle SQL优化
需积分: 14 177 浏览量
更新于2023-05-27
评论
收藏 410KB PDF 举报
oracle SQL优化,说明+举例使用,为了提高系统性能,写好SQL语句是很有必要的
资源详情
资源评论
资源推荐

Or a c l e S QL 语 句 优 化
整理:黄德承
作者:B
lack_Snail

Oracle SQL 优化
POSS
软件平台(
www.poss.cn
)
2
目录
目录........................................................................................................................................ 2
第 1 章 模块功能概要描述................................................................................................... 4
第 2 章 SQL 语句编写注意问题 .......................................................................................... 5
2.1 IS NULL 与 IS NOT NULL.................................................................................... 5
2.2 联接列...................................................................................................................... 5
2.3 带通配符(%)的 like 语句 .................................................................................. 6
2.4 Order by 语句 ...................................................................................................... 6
2.5 NOT......................................................................................................................... 6
2.6 IN 和 EXISTS........................................................................................................ 7
第 3 章 SQL 语句性能优化 .................................................................................................. 9
3.1 选用合适的 ORACLE 优化器................................................................................ 9
3.2 访问 Table 的方式................................................................................................... 9
3.3 共享 SQL 语句 ...................................................................................................... 10
3.4 选择最有效率的表名顺序(只在基于规则的优化器中有效)............................. 11
3.5 WHERE 子句中的连接顺序................................................................................. 12
3.6 SELECT 子句中避免使用 ‘ *’ ............................................................................. 13
3.7 减少访问数据库的次数........................................................................................ 13
3.8 使用 DECODE 函数来减少处理时间.................................................................. 14
3.9 整合简单,无关联的数据库访问........................................................................... 15
3.10 删除重复记录...................................................................................................... 16
3.11 用 TRUNCATE 替代 DELETE .......................................................................... 16
3.12 尽量多使用 COMMIT ........................................................................................ 16
3.13 计算记录条数...................................................................................................... 17
3.14 用 Where 子句替换 HAVING 子句.................................................................... 17
3.15 减少对表的查询.................................................................................................. 17
3.16 通过内部函数提高 SQL 效率............................................................................18
3.17 使用表的别名(Alias) .......................................................................................... 20
3.18 用 EXISTS 替代 IN ............................................................................................. 20
3.19 用 NOT EXISTS 替代 NOT IN........................................................................... 21
3.20 用表连接替换 EXISTS ....................................................................................... 21
3.21 用 EXISTS 替换 DISTINCT ............................................................................... 22
3.22 识别’低效执行’的 SQL 语句 ........................................................................ 22
3.23 使用 TKPROF 工具来查询 SQL 性能状态....................................................... 23
3.24 用 EXPLAIN PLAN 分析 SQL 语句.................................................................. 23
3.25 用索引提高效率.................................................................................................. 25
3.26 索引的操作.......................................................................................................... 25
3.27 基础表的选择...................................................................................................... 27
3.28 多个平等的索引.................................................................................................. 27

Oracle SQL 优化
POSS
软件平台(
www.poss.cn
)
3
3.29 等式比较和范围比较.......................................................................................... 28
3.30 不明确的索引等级.............................................................................................. 29
3.31 强制索引失效...................................................................................................... 30
3.32 避免在索引列上使用计算.................................................................................. 30
3.33 自动选择索引...................................................................................................... 31
3.34 避免在索引列上使用 NOT ................................................................................ 31
3.35 用>=替代>........................................................................................................... 33
3.36 用 UNION 替换 OR (适用于索引列)................................................................. 33
3.37 用 IN 来替换 OR................................................................................................. 36
3.38 避免在索引列上使用 IS NULL 和 IS NOT NULL ........................................... 37
3.39 总是使用索引的第一个列.................................................................................. 37
3.40 ORACLE 内部操作............................................................................................. 38
3.41 用 UNION-ALL 替换 UNION ( 如果有可能的话)...........................................39
3.42 使用提示(Hints) .................................................................................................. 40
3.43 用 WHERE 替代 ORDER BY ............................................................................ 41
3.44 避免改变索引列的类型...................................................................................... 42
3.45 需要当心的 WHERE 子句.................................................................................. 43
3.46 连接多个扫描...................................................................................................... 44
3.47 CBO 下使用更具选择性的索引......................................................................... 45
3.48 避免使用耗费资源的操作.................................................................................. 46
3.49 优化 GROUP BY ................................................................................................ 46
3.50 使用日期.............................................................................................................. 47
3.51 使用显式的游标(CURSORs) ............................................................................. 47
3.52 优化 EXPORT 和 IMPORT ................................................................................ 47
3.53 分离表和索引...................................................................................................... 48

Oracle SQL 优化
POSS
软件平台(
www.poss.cn
)
4
第1章 模块功能概要描述
在应用系统开发初期,由于开发数据库数据比较少,对于查询 SQL 语句,复杂视图的的
编写等体会不出 SQL 语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着
数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优
化中一个很重要的方面就是 SQL 语句的优化。对于海量数据,劣质 SQL 语句和优质 SQL 语句
之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写
出高质量的 SQL 语句,提高系统的可用性。

Oracle SQL 优化
POSS
软件平台(
www.poss.cn
)
5
第2章 SQL 语句编写注意问题
下面就某些 SQL 语句的 where 子句编写中需要注意的问题作详细介绍。在这些 where 子句
中,即使某些列存在索引,但是由于编写了劣质的 SQL,系统在运行该 SQL 语句时也不能使用
该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。
2.1 IS NULL 与 IS NOT NULL
任何 SQL 语句,只要在 where 子句中使用了 is null 或 is not null,那么 Oracle 优化器就不允
许使用索引了。
2.2 联接列
对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。我们一起来
看一个例子,假定有一个职工表(employee ),对于一个职工的姓和名分成两列存放
(FIRST_NAME 和 LAST_NAME),现在要查询一个叫比尔.克林顿(Bill Cliton)的职工。
下面是一个采用联接查询的 SQL 语句,
select * from employss
where
first_name||''||last_name ='Beill Cliton';
上面这条语句完全可以查询出是否有 Bill Cliton 这个员工,但是这里需要注意,系统优化器
对基于 last_name 创建的索引没有使用。 当采用下面这种 SQL 语句的编写,Oracle 系统就可以采
用基于 last_name 创建的索引。
Select * from employee
where
first_name ='Beill' and last_name ='Cliton';
遇到下面这种情况又如何处理呢?如果一个变量(name)中存放着 Bill Cliton 这个员工的姓
名,对于这种情况我们又如何避免全程遍历,使用索引呢?可以使用一个函数,将变量 name 中
剩余47页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论0