Oracle性能调整与优化(二)
2008-12-04 13:02:17 来源:WEB开发网至于最后一个问题的答案,效率高的SQL对不同的人可能意思不一样,在本例中,使用一个视图怎么样?这样与最初的查询在成本上有何不同,或有其他需要考虑的事情吗?
假设我有一个名叫cost_example的视图,创建语句如下:
create or replace view cost_example
as
select department_id, department_name, region_name
from departments natural join locations
natural join countries natural join regions;
让我们在视图中查看一条记录
SQL> select department_id, department_name, region_name
2 from cost_example
3 where department_id=70;
DEPARTMENT_ID DEPARTMENT_NAME REGION_NAME
------------- ------------------------------ ------------
70 Public Relations Europe
输出三列或字段,它们能够被改动吗?如果可以,为什么?如果不可以,为什么不可以?
我们假设现在用Asia代替REGION_NAME的值Europe
SQL> update cost_example
2 set region_name = 'Asia'
3 where region_name = 'Europe';
set region_name = 'Asia'
*
ERROR at line 2:
ORA-01779: cannot modify a column which maps to a non key-preserved table
DEPARTMENT_NAME字段的值能被修改吗?
SQL> update cost_example
2 set department_name = 'PR'
3 where department_name = 'Public Relations';
1 row updated.
为什么在视图中的记录能被更新的原因是departments表是一个关键保护表(它的主键DEPARTMENT_ID用于视图的创建了)。
这个例子的要点是:仅仅因为你获得了低成本并不意味着你就不能再为查询优化做其他的事情了,使用单一连接结构适用于开发者,视图适用于用户。
小结
本文的主要观点是:
·使用绑定变量
·使用效率高的SQL
·使用编码标准
·创建适当的视图
这些步骤没有哪个在执行或实现起来特别困难,因为程序员常常使用"tableA.column_name = tableB.column_name"的格式来连接,转移到使用自然连接节约相当多的输入,加上受益于关键列名相配(在子表中的外键列与父表中的主键有相同的列名),如展示的那样,某些量度可能没有大的影响,但是当当作为一个整体时,每一个小的都对改善性能有帮助,在第3部分中,我们将查看更多的例子。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接