Oracle優化-表設計

前言

  絕大多數的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所示:

合理設計優化Oracle庫表設計的若干方法
圖 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);


  我們承認在ER關系上,這份設計并不存在的缺陷,但卻存在以下有待優化的地方:

  ·沒有將表數據和索引數據存儲到不同的表空間中,而不加區別地將它們存儲到同一表空間里。這樣,不但會造成I/O競爭,

轉載于:https://www.cnblogs.com/login2012/p/5819464.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win10遠程桌面 出現 身份驗證錯誤,要求的函數不受支持,這可能是由于CredSSP加密Oracle修正 解決方法...

升級至win10 最新版本10.0.17134,遠程桌面連接Window Server時報錯信息如下: 出現身份驗證錯誤,要求的函數不正確,這可能是由于CredSSP加密Oracle修正。 解決方法: 運行 gpedit.msc 本地組策略: 計算機配置…

CMM2

原文出處:http://hi.baidu.com/seaweaver/blog/item/e80e7af427f674d9f2d3854a.html CMM2的六個KPA 1、需求管理 (RM,Requirement Management) 2、軟件項目計劃 (SPP,Software Project Planning&#…

查看linux系統核數

查看linux系統核數: grep ^processor /proc/cpuinfo | wc -l轉載于:https://www.cnblogs.com/myyan/p/5822368.html

Rsyslog 日志相關內容

[rootserver vusers_home]# rpm -ql rsyslog|more ###.so結尾為模塊,模塊有分im為輸入模塊,om 為輸出模塊/etc/logrotate.d/syslog/etc/pki/rsyslog/etc/rc.d/init.d/rsyslog/etc/rsyslog.conf/etc/rsyslog.d/etc/sysconfig/rsyslog/lib64/rsyslog…

MFC導出對話框類DLL的實現

1.新建基于對話框的應用程序 2.新建MFC DLL工程 3.選擇MFC DLL 4.選擇擴展Dll選項(重要!!!) 5.為Dll工程添加一個MFC類,基類為CDialogEx 6.Dll新建的MFC 類中添加resource.h防止編譯出錯…

中國如何引進CMM評估,促進軟件產業發展

北京軟件行業協會 (本文轉載自軟件工程專家網www.21cmm.com) 一、CMM的含義及作用   CMM(軟件能力成熟度模型:Capability Maturity Model For Software)是由美國卡內基梅 隆大學的軟件工程研究所(SEI&a…

關于游戲平衡性——王者榮耀英雄傷害數值參考

收集王者榮耀各個英雄的裝備對技能增加的百分比,這樣的主要目的為保證游戲的平衡性。對于技能主要包括:血量、物理攻擊、法術攻擊、物理穿透、法術穿透、暴擊等。關于各個裝備,已經列成一張excel表格,在這里不再詳細描述表格。在這…

Swift-setValuesForKeysWithDictionary

重寫 setValuesForKeysWithDictionary 那么字典中可以有的字段在類中沒有對應屬性 class Person : NSObject {var age :Int 0 // 重寫 setValuesForKeysWithDictionary 那么字典中可以有的字段在類中沒有對應屬性override func setValuesForKeysWithDictionary(keyedValues…

hdu 1269 迷宮城堡(trajan判環)

題目鏈接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1269 題意&#xff1a;略 題解&#xff1a;trajan模版直接求強連通分量。 #include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N 1e4 10; const i…

Arithmetic圖像處理halcon算子持續更新

目錄abs_diff_imageabs_imageacos_imageadd_imageasin_imageatan2_imageatan_imagecos_imagediv_imageexp_imagegamma_imageinvert_imagelog_imagemax_imagemin_imagemult_imagepow_imagescale_imagesin_imagesqrt_imagesub_imagetan_imageabs_diff_image 功能&#xff1a;計算…

身于“亂世”,我們程序員應該如何打算?

今天看了這篇文章&#xff0c; 發現自己也有點生處亂世&#xff0c;不平之感&#xff0c;但是文章的樸實卻讓我有了一個良好的反省&#xff0c;特此轉載 分類&#xff1a; 項目管理 2011-09-04 00:58 770人閱讀 評論(12) 收藏 舉報 不僅要低頭拉車&#xff0c;還要抬頭看路。…

Activity的啟動流程

Activity的啟動流程 努力工作 自己平時工作接觸的frameworks代碼比較多&#xff0c;但真正理解的很有限&#xff0c;一直在努力分析。。我主要還是用補丁的形式來看 core/java/android/app/Activity.java | 6 core/java/android/app/ActivityManagerNative.jav…

es6--箭頭函數

基本用法 ES6允許使用“箭頭”&#xff08;>&#xff09;定義函數。 var f v > v; 上面的箭頭函數等同于&#xff1a; var f function(v) {return v; }; 如果箭頭函數不需要參數或需要多個參數&#xff0c;就使用一個圓括號代表參數部分。 var f () > 5; // 等同于…

halcon Bit圖位像素處理算子,持續更新

目錄bit_andbit_lshiftbit_maskbit_notbit_orbit_rshiftbit_slicebit_xorbit_and 功能&#xff1a;輸入圖像的所有像素的逐位與。 bit_lshift 功能&#xff1a;圖像的所有像素的左移。 bit_mask 功能&#xff1a;使用位掩碼的每個像素的邏輯與。 bit_not 功能&#xff1…

NYOJ題目839合并

--------------------------- AC代碼&#xff1a; 1 import java.util.Scanner;2 3 public class Main {4 5 public static void main(String[] args) {6 7 8 Scanner scnew Scanner(System.in);9 10 int timessc.nextInt(); 11 …

指針的魅力

序 指針說&#xff1a;love me&#xff0c;love me&#xff01; 但是他對指針說&#xff1a;I hate u&#xff0c;I hate u&#xff01; …… 指針僅僅是作為指針&#xff0c;我們可以把它當做有用的工具&#xff0c;為我們提供便利與好處。說起工具不得不讓我想起一樣東西—…

python多進程

2019獨角獸企業重金招聘Python工程師標準>>> python多進程 進程簡介 進程是程序在計算機上的一次執行活動。當你運行一個程序&#xff0c;你就啟動了一個進程。顯然&#xff0c;程序是死的(靜態的)&#xff0c;進程是活的(動態的)。進程可以分為系統進程和用戶進程。…

halcon彩色圖像顏色處理算子,持續更新

目錄apply_color_trans_lutcfa_to_rgbtrans_to_rgbclear_color_trans_lutcreate_color_trans_lutgen_principal_comp_translinear_trans_colorprincipal_comprgb1_to_grayrgb3_to_graytrans_from_rgbapply_color_trans_lut 功能&#xff1a;申請使用顏色查找表。 cfa_to_rgb …

奪命雷公狗---node.js---20之項目的構建在node+express+mongo的博客項目5mongodb在項目中實現添加數據...

我們上一步就引入了mongodb了&#xff0c;那么下一步就要開始寫添加數據了&#xff0c;不過有個前提是先將表單的數據處理好&#xff1a; 最基本的這部現在已經成功了&#xff0c;因為最基本的這步就是先將表單處的提交方式和提交地址給處理好&#xff0c;這里和PHP的基本上是一…

重新綁定ItemsSource先設置ItemsSource = null;的原因

即報錯信息為&#xff1a;在使用 ItemsSource 之前&#xff0c;項集合必須為空。原因&#xff1a;Items和ItemSource&#xff0c;只能有一個生效&#xff0c;想用其中一個&#xff0c;另一個必須是空。重新綁定ItemSource&#xff0c;雖然綁定的集合對象Clear了&#xff0c;但是…