新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 数据库 > Oracle

详解Oracle数据库物理设计--表和索引设计建议

时间:2019-10-11 09:44:02  来源:  作者:

概述

物理设计就是根据所选择的关系型数据库的特点对逻辑模型进行存储结构设计。它涉及的内容包含以下4方面:1. 定义数据库、表及字段的命名规范;2. 选择合适的存储引擎或者存储结构;3. 为表中的字段选择合适的数据类型;4. 建立数据库结构。

今天主要谈谈表和索引的设计建议。

详解Oracle数据库物理设计--表和索引设计建议

 


1、表物理设计基本建议

1)除特殊需求,建议采用普通的堆表(Help Table)。

2)每个表在创建的时候,建议指定所在的表空间。不要采用默认表空间。以防止表建立在系统表空间上导致的性能和安全问题。

3)建议应用设计开发人员提供每张表的DNL操作频度数值。如果update操作频度高,则可将PCTFREE设计为较高(10%,20%,...),反之,则可将PCTFREE设置为较高(1%,...)。

当表中存在大量的delete操作时。PCTUSED值的增大,将提高表空间的利用率,并提高insert和update操作的性能。因此,建议将大量进行delete操作的表的PCTUSED设为60,否则设为缺省值40。

4)对并发访问量比较高的表和索引,将INITRANS设置较大,特别是针对索引,例如设置INITRANS设为10。

5)对比较小的代码和参数表,可考虑IOT表技术。

6)如果某几个静态表关系比较密切,则可以采用聚族表的方法。

以下就是XX表创建脚本。

create table t_card_accnt(
card_no char(19) not null,
card_medium char(1) not null,
card_type char(1) not null,
card_class char(2) not null,
cstm_name varchar2(40) not null,
App_date number(6) not null,
Pwd RAW(8) not null)
PCTFREE 20
PCTUSED 40
INITRANS 2
MAXTRANS 255
TABLESPACE TS_DATA
LOGGING
STORAGE (
INITIAL 104857600
NEXT 10485760
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 5
FREELISTS GROUPSS 5
BUFFER_POOL DEFAULT)
ENABLE ROW MOVEMENT
PARTITION BY HASH(CARD_NO)
PARTITIONS 64
STORE IN (TS_DATA);

需要说明的是,上述脚本是Oracle Date Modeler工具生成的。实际上,如采取手工编写方法,大量物理属性可以采用缺省值,例如STORAGE短语、ENABLE ROW MOVEMENT等均可省略。


2、索引设计基本建议

以下不仅从物理设计,而且从应用开发角度提供索引设计的基本建议。

1)通常而言,交易系统设立为B*树索引,对数据仓库系统,则可考虑Bitmap、Bitmap Join等索引。

2)通过分析应用软件对数据访问方式。展开索引设计。

3)索引与数据分别存储在不同的表空间。

4)不要对索引字段进行运算。

5)不要对索引字段进行格式转换。

6)不要对索引字段使用函数。

7)加强索引使用和索引效率的分析。


3、B*树单字段索引设计建议

详解Oracle数据库物理设计--表和索引设计建议

 

1)分析SQL语句中的约束条件字段。

2)如果约束条件字段不固定,建议创建针对单字段的普通B*树索引。

3)选择可选性最高的字段建立索引。

4)如果是多表连接SQL语句,注意被驱动表 (Drived Table)的连接字段是否需要创建索引。

5)通过多种SQL分析工具。分析执行计划并以量化形式评估效果。


4、复合索引设计建议

详解Oracle数据库物理设计--表和索引设计建议

 

1)分析SQL语句中的约束条件字段。

2)如果约束条件字段比较固定,则优先考虑创建针对多字段的普通B*树复合索引。例如当时涉及月份、账号、金融机构代码三个字段的条件,则可以考虑建立一个复合索引。

3)如果单个字段是主键或唯一字段,或者可选性非常高的字段,尽管约束条件字段比较固定,也不一定要建成复合索引,可建成单字段索引,降低复合索引开销。

4)在复合索引设计中,需首先考虑复合索引第一个设计原则:复合索引的前缀性(Prefixing)。即SQL语句中,只有复合索引的第一个字段作为约束条件,该复合索引字段才会启用。在复合索引设计中,其次应考虑复合索引的可选性(Selectivity或Cardinality)。即按可选性高低,进行复合索引字段的排序。例如将上述索引的字段顺序排列为:账号、金融机构代码、月份。

5)如果条件设计的字段不固定,组合比较灵活,则分别为月份、账号、金融机构三个字段建立索引。

6)如果是多表连接SQL语句,注意是否可以在被驱动表的连接字段与该表的其他约束条件字段上,创建复合索引。

7)通过多种SQL分析工具,分析执行计划并以量化形式评估效果。



Tags:Oracle   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
概述 今天主要介绍一下Oracle行转列及列转行常见函数,下面一起来看看吧!行列转换pivot函数:行转列函数语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值));un...【详细内容】
2020-01-07   Oracle  点击:(94)  评论:(0)  加入收藏
一、在查询中过滤行(where)select employee_id,last_name,salaryfrom employeeswhere employee_id > 200操作符 含义= 等于(不是==)> 大于>= 大于、等于< 小于<= 小于、等于<>...【详细内容】
2020-01-02   Oracle  点击:(23)  评论:(0)  加入收藏
对于一门技术的学习,尤其是像Oracle database这种知识体系极其庞杂的技术来讲,从宏观上了解其体系结构是至关重要的。同时,个人认为,未必是专业DBA人员才需要了解其体系结构(固然...【详细内容】
2019-12-30   Oracle  点击:(21)  评论:(0)  加入收藏
一、前言这里记录一次将MySQL数据库中的表数据迁移到Oracle数据库中的全过程 ,使用工具 Navicat,版本 12.0.11操作环境及所用工具: mysql5.7 oracle18c windows Navicat12.0.1...【详细内容】
2019-12-27   Oracle  点击:(37)  评论:(0)  加入收藏
不少电脑客户端用户为了方便访问Oracle服务器,想必经常为Oracle服务器配置ODBC源,当然了,这个过程也是比较简单的,下面看一下32位的操作系统是如何配置ODBC数据源的打开控制面板...【详细内容】
2019-12-26   Oracle  点击:(23)  评论:(0)  加入收藏
1.什么是数据库?简单的说,数据库(英文Database)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过...【详细内容】
2019-12-18   Oracle  点击:(3)  评论:(0)  加入收藏
create or replace type spell_code as object(spell varchar2(10),code number);create or replace type t_spellcode is table of spell_code;--返回拼音与代码的对应关系...【详细内容】
2019-12-18   Oracle  点击:(226)  评论:(0)  加入收藏
1、物理内存&mdash;详细信息: 物理内存 - 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB)。 预期值:?N/A 实际值:?N/A ?错误列表: ?-? PRVF-7531 : 无法...【详细内容】
2019-12-17   Oracle  点击:(33)  评论:(0)  加入收藏
关系表:sys_functionid :主键idpid:父关系idOracle函数:start with&hellip;connect by&hellip;prior1.表数据select * from family; 2.查询自己和自己所有的后代select s.*from...【详细内容】
2019-12-13   Oracle  点击:(30)  评论:(0)  加入收藏
Oracle真正集群的出现是在Oracle公司收购Rdb并吸收了相关技术优势后,才正在推出了属于自己的RAC集群解决方案。RAC​和集群分类章节提到的集群系统有很多相似之处,从下图我们...【详细内容】
2019-12-09   Oracle  点击:(29)  评论:(0)  加入收藏
相信大家在客户现场维护的时候一定会适时地做一些备份操作,对关键业务建立完备的备份机制,本篇文章就是给大家一个linux环境下的参考。一、 用imp/exp实现数据的导入导出(一)环...【详细内容】
2019-12-06   Oracle  点击:(53)  评论:(0)  加入收藏
最近两天项目上线,跟着前辈学了不少东西,现在整理一下 。DBLINK使用背景因为项目是推广项目,是在一期项目上进行增加的功能,对数据的升级比较麻烦。我们的升级策略是先统计出项...【详细内容】
2019-12-04   Oracle  点击:(34)  评论:(0)  加入收藏
概述今天主要介绍Oracle数据库的三大索引类型,仅供参考。 一、B-Tree索引三大特点:高度较低、存储列值、结构有序1.1利用索引特性进行优化外键上建立索引:不但可以提升查询效率...【详细内容】
2019-11-29   Oracle  点击:(59)  评论:(0)  加入收藏
1、for update nowait 与 for update 的目的: 锁定表的所有行,排斥其他针对这个表的写操作。确保只有当前事务对指定表进行写操作。例子:for update1 select * from TTable1...【详细内容】
2019-11-15   Oracle  点击:(82)  评论:(0)  加入收藏
Oracle 基础知识(特别基础)1 如何确定数据库已经启动(1)查看进程Ps &ndash;ef |grep oracleoracle 39452856 1 0 May 23 - 11:59 ora_smon_GJ2oracle 40304850 1 0 May 23 - 3...【详细内容】
2019-11-13   Oracle  点击:(35)  评论:(0)  加入收藏
概述今天主要介绍Oracle11g 网络访问控制列表--DBA_NETWORK_ACL。一、DBA_NETWORK_ACL_PRIVILEGESDBA_NETWORK_ACL_PRIVILEGES describes the network privileges defined i...【详细内容】
2019-11-07   Oracle  点击:(65)  评论:(0)  加入收藏
由于SQL Server不常用,所以这里只针对MySQL数据库和Oracle数据库的区别(1) 对事务的提交MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令...【详细内容】
2019-11-06   Oracle  点击:(62)  评论:(0)  加入收藏
近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了2次“死锁(deadlock)”的问题,部分关键日志如下:Found one Java-level deadlock...【详细内容】
2019-11-05   Oracle  点击:(28)  评论:(0)  加入收藏
oracle按天,周,月,季度,年查询排序天--to_char(t.start_time,&#39;YYYY-MM-DD&#39;)周 --to_char(t.start_time,&#39;YYYY&#39;),to_char(t.start_time,&#39;IW&#39;)月度--to_ch...【详细内容】
2019-10-18   Oracle  点击:(117)  评论:(0)  加入收藏
概述今天主要总结一下Oracle表空间每日增长和历史情况统计的一些脚本,仅供参考。11g统计表空间的每日增长量SELECT a.snap_id, c.tablespace_name ts_name, to_char(to_date(...【详细内容】
2019-10-14   Oracle  点击:(255)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条