概述
物理設(shè)計就是根據(jù)所選擇的關(guān)系型數(shù)據(jù)庫的特點對邏輯模型進(jìn)行存儲結(jié)構(gòu)設(shè)計。它涉及的內(nèi)容包含以下4方面:1. 定義數(shù)據(jù)庫、表及字段的命名規(guī)范;2. 選擇合適的存儲引擎或者存儲結(jié)構(gòu);3. 為表中的字段選擇合適的數(shù)據(jù)類型;4. 建立數(shù)據(jù)庫結(jié)構(gòu)。
今天主要談?wù)劚砗?a style='color:#0000CC;' href='http://m.dszhyy.com/show-19-34212-1.html' title="百度索引量異常怎么查詢 網(wǎng)站百度收錄排名異常的的檢查記錄實例教程" target='_blank'>索引的設(shè)計建議。
1、表物理設(shè)計基本建議
1)除特殊需求,建議采用普通的堆表(Help Table)。
2)每個表在創(chuàng)建的時候,建議指定所在的表空間。不要采用默認(rèn)表空間。以防止表建立在系統(tǒng)表空間上導(dǎo)致的性能和安全問題。
3)建議應(yīng)用設(shè)計開發(fā)人員提供每張表的DNL操作頻度數(shù)值。如果操作頻度高,則可將設(shè)計為較高(10%,20%,...),反之,則可將設(shè)置為較高(1%,...)。
當(dāng)表中存在大量的操作時。值的增大,將提高表空間的利用率,并提高和操作的性能。因此,建議將大量進(jìn)行操作的表的設(shè)為60,否則設(shè)為缺省值40。
4)對并發(fā)訪問量比較高的表和索引,將設(shè)置較大,特別是針對索引,例如設(shè)置設(shè)為10。
5)對比較小的代碼和參數(shù)表數(shù)據(jù)庫關(guān)系運算教程,可考慮IOT表技術(shù)。
6)如果某幾個靜態(tài)表關(guān)系比較密切,則可以采用聚族表的方法。
以下就是XX表創(chuàng)建腳本。
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 40INITRANS 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);
需要說明的是,上述腳本是 Date 工具生成的。實際上,如采取手工編寫方法,大量物理屬性可以采用缺省值,例如短語、 ROW 等均可省略。
2、索引設(shè)計基本建議
以下不僅從物理設(shè)計,而且從應(yīng)用開發(fā)角度提供索引設(shè)計的基本建議。
1)通常而言,交易系統(tǒng)設(shè)立為B*樹索引,對數(shù)據(jù)倉庫系統(tǒng),則可考慮、 Join等索引。
2)通過分析應(yīng)用軟件對數(shù)據(jù)訪問方式。展開索引設(shè)計。
3)索引與數(shù)據(jù)分別存儲在不同的表空間。
4)不要對索引字段進(jìn)行運算。
5)不要對索引字段進(jìn)行格式轉(zhuǎn)換。
6)不要對索引字段使用函數(shù)。
7)加強索引使用和索引效率的分析。
3、B*樹單字段索引設(shè)計建議
1)分析SQL語句中的約束條件字段。
2)如果約束條件字段不固定,建議創(chuàng)建針對單字段的普通B*樹索引。
3)選擇可選性最高的字段建立索引。
4)如果是多表連接SQL語句,注意被驅(qū)動表 ( Table)的連接字段是否需要創(chuàng)建索引。
5)通過多種SQL分析工具。分析執(zhí)行計劃并以量化形式評估效果。
4、復(fù)合索引設(shè)計建議
1)分析SQL語句中的約束條件字段。
2)如果約束條件字段比較固定,則優(yōu)先考慮創(chuàng)建針對多字段的普通B*樹復(fù)合索引。例如當(dāng)時涉及月份、賬號、金融機(jī)構(gòu)代碼三個字段的條件,則可以考慮建立一個復(fù)合索引。
3)如果單個字段是主鍵或唯一字段,或者可選性非常高的字段,盡管約束條件字段比較固定數(shù)據(jù)庫關(guān)系運算教程,也不一定要建成復(fù)合索引,可建成單字段索引,降低復(fù)合索引開銷。
4)在復(fù)合索引設(shè)計中,需首先考慮復(fù)合索引第一個設(shè)計原則:復(fù)合索引的前綴性()。即SQL語句中,只有復(fù)合索引的第一個字段作為約束條件,該復(fù)合索引字段才會啟用。在復(fù)合索引設(shè)計中,其次應(yīng)考慮復(fù)合索引的可選性(或)。即按可選性高低,進(jìn)行復(fù)合索引字段的排序。例如將上述索引的字段順序排列為:賬號、金融機(jī)構(gòu)代碼、月份。
5)如果條件設(shè)計的字段不固定,組合比較靈活,則分別為月份、賬號、金融機(jī)構(gòu)三個字段建立索引。
6)如果是多表連接SQL語句,注意是否可以在被驅(qū)動表的連接字段與該表的其他約束條件字段上,創(chuàng)建復(fù)合索引。
7)通過多種SQL分析工具,分析執(zhí)行計劃并以量化形式評估效果。
后面會分享更多和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注下!