優化Oracle庫表設計的若干好多行動 1

2022-08-29 14:33:22 字數 2206 閱讀 7617

起原:天極網

前言

絕除夜除夜都的oracle資料庫功效標題問題都是因為資料庫設計不合理形成的,只需少部門標題問題根植於database buffer、share pool、redo log buffer等外存模組設定配備擺設不合理,i/o爭用,cpu爭用等dba職責範疇上。所以除非是面臨乙個業已完成不成調動的細碎,不然我們不該過多地將存眷點投向記憶體、i/o、cpu等功效調停專案上,而應存眷資料庫表自己的設計能否合理,庫表設計的合理性才是次第功效的真正執牛耳者。

合理的資料庫設計需求思量以下的方面:

·營業資料以何種行動表達。如乙個員工有多個email,你可以在t_employee表中設立培植多個email欄位如email_1、email_2、email_3,也可以樹立乙個t_email子表來儲存,乃至可以用逗號疏散隔多個email所在寄放在乙個欄位中。

·資料以何種行動物理儲存。如除夜表的分割槽,表空間的合理設計等。

·怎樣設立培植合理的資料表索引。表索引幾乎是行進資料表盤問功效最有效的行動,oracle擁有型別豐厚的資料表索引型別,怎樣取捨選擇顯得特殊首要。

本文我們將眼光首要聚焦於資料表的索引上,同時也將說起其他兩點的內容。經由對乙個簡單的庫表設計例項的說明引出設計中的缺乏,並一一糾正。思量得手工編寫庫表的sql腳起原根基始且低效,我們將用目前最流行的庫表設計東西powerdesigner 10來陳述表設計的歷程,所以在本文中你還會體會到一些干係的powerdesigner的運用本領。

乙個簡單的例子

某個啟示人員著手設計乙個訂單的細碎,這個細碎中有兩個首要的營業表,別離是訂單根基資訊表和訂單條款表,這兩張表具有主從干係的表,個中t_order是訂單主表,而t_order_item是訂單條款表。資料庫設計人員的設計效果如圖 1所示:

圖 1 訂單主從表

order_id是訂單號,為t_order的主鍵,經由名為seq_order_id的序列孕育發作鍵值,而item_id是t_order_item表的主鍵,經由名為seq_order_item的序列孕育發作鍵值,t_order_item經由order_id外來鍵關聯到t_order表。

需求文件指出訂單記實將經由以下兩種行動來盤問資料:

·client order_date is_shpped:依照"客戶+訂貨日期 能否發貨"前提盤問訂單及訂單條款。

·order_date is_shipped:依照"訂貨日期 能否發貨"前提盤問訂單及訂單條款。

資料庫設計人員依照這個要求,在t_order表的client、 order_date及is_shpped三字段上設立培植了乙個復合索引idx_order_composite;在t_order_item為外來鍵order_id設立培植idx_order_item_order_id索引。

讓我們看一下該份設計的最終sql指令碼:

/*訂單表*/

create table t_order (

order_id number(10) not null,

address varchar2(100),

client varchar2(60),

order_date char(8),

is_shipped char(1),

constraint pk_t_order primary key (order_id)

);create index idx_client on t_order (

client asc,

order_date asc,

is_shipped asc);

/*訂單條款子表*/

create table t_order_item (

item_id number(10) not null,

order_id number(10),

item varchar2(20),

count number(10),

constraint pk_t_order_item primary key (item_id)

);create index idx_order_item_order_id on t_order_item (

order_id asc);

alter table t_order_item add constraint fk_t_order__reference_t_order foreign key (order_id) references t_order (order_id);

優化Oracle庫表設計的若干方法

1.oracle會自動為表的主鍵列建立索引,這個預設的索引是普通的b tree索引 2.索引本身實際上是乙個表,因此當對表新增乙個記錄時,oracle必須做兩次插入。這樣,組表增加乙個索引將導致插入操作要兩倍多的時間 兩倍的時間用於兩次插入,另外還需要一點時間處理二表之間 的同步 增加兩個索引將使用...

優化Oracle庫表設計的若干方法 一

前言 絕大多數的oracle資料庫效能問題都是由於資料庫設計不合理造成的,只有少部分問題根植於database buffer share pool redo logbuffer等記憶體模組配置不合理,i o爭用,cpu爭用等 dba職責範圍上。所以除非是面對乙個業已完成不可變更的系統,否則我們不應過...

優化Oracle庫表設計的若干方法 三

2 顯式為主鍵列建立反向鍵索引 2.1 反向鍵索引的原理和用途 我們知道oracle會自動為表的主鍵列建立索引,這個預設的索引是普通的b tree索引。對於主鍵值是按順序 遞增或遞減 加入的情況,預設的b tree索引並不理想。這是因為如果索引列的值具有嚴格順序時,隨著資料行的插入,索引樹的層級增長...