Oracle性能调整与优化(三)
2008-12-04 13:02:12 来源:WEB开发网输出内容意味着什么?你可以立即判断出这样一个事实,不是所有表上都有主键,有15个表,但这里只返回了14行(或如果使用distinct的话,只返回11行),为什么我们会知道这个结果?因为创建主键时会自动创建一个索引,如果你在载入脚本中禁用了所有的引用完整性约束,你还会怀疑什么呢?
Oracle推荐将索引列作为经常访问的关联列,常见的规则是索引列用于where子句,缺少索引,你应该怀疑“create table”部分没有创建外键索引列。
下面的查询显示了带外键的表名/列名:
SQL> select a.constraint_name, b.constraint_type,
2 a.table_name, a.column_name
3 from user_cons_columns a, all_constraints b
4 where a.constraint_name=b.constraint_name
5 and constraint_type = 'R';
CONSTRAINT_NAME C TABLE_NAME COLUMN_NAME
---------------- - -------------------- -------------
SYS_C009831 R DF_MOVIE_EMPLOYEE SUPERVISORID
SYS_C009828 R DF_MOVIE_STORE DISTRICTID
SYS_C009821 R DF_ORDERDETAILS PRODUCTID
SYS_C009820 R DF_ORDERDETAILS ORDERID
DFMOVIESTOREFK2 R DF_MOVIE_STORE MANAGERID
SYS_C009852 R DF_MOVIE_RENTAL TAPEID
SYS_C009851 R DF_MOVIE_RENTAL CUSTID
SYS_C009838 R DF_MOVIE_CUSTOMER STOREID
SYS_C009814 R DF_ORDERS CUSTID
SYS_C009846 R DF_MOVIE_TAPE MOVIEID
DFMOVIEEMPFK2 R DF_MOVIE_EMPLOYEE STOREID
11 rows selected.
这是最终结果吗?怀疑被证实了,外键没有被索引。
从管理和维护角度来看,为什么只有两个约束是明确命名的而剩下的都是系统命名的?实际上是这个方案总共有51个约束,这里只是发生了两个命名的约束。
小结
从这次探索来看,工具如DataFactory或你自己编写的脚本最关键的地方是能够产生百万计的测试样本数据,如果不能保证引用完整性,或在数据建模方面的最佳实践,它有什么好处?如果你打算在应用程序上调试查询,测试数据需要反应应用程序如何使用它。如果你依赖于数据完整性,你的测试数据需要支持并遵从父表/子表关联关系。
从设计的立场来看,有两个最佳实践容易被违背,其一是外键列无索引,其二是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修改表的两种方式
更多精彩
赞助商链接