一數據庫
1. 先創建邏輯模型,也就是ER圖 ,再映射爲物理模型。oracle
2. 關於範式, 標準化數據模型通常都不是最終的結果,但他始終是建模最好的起點。性能
鍵,完整的鍵,除了鍵沒有其餘東西。優化
3. 關於數據類型的選擇。.net
因爲oracle在數據類型的物理存儲上採用很是靈活的方式,所以從存儲和性能考慮,使用限制性很強的數據類型或者精度 並無優點。設計
二指針
選擇數據類型時,要注意如下方面:對象
1.大部分狀況下,無論你如何限制數據類型,Oracle內部都會使用大範圍高精度的浮點方式進行存儲,針對於數字和日期。blog
就算你給一個數字指定了精度,這個精度更多的意義在於約束數據或定義文檔,而不是爲了優化性能。索引
也有例外的狀況,就是精度可以減小數據的長度,就會有利於性能的提升。
2.固定長度的字符串都會佔用一個固定長度的存儲空間。 採用固定長度能夠下降碎片,可是可能會致使較大的平均行長,致使全表掃描開銷加大。
所以,除非你十分肯定字符串的長度是肯定的,好比MAC地址,不然你就應該選擇變長字符串類型。
3 varchar在11g以後所有用varchar2替代,現階段 2者是同樣的。
4. 對於大文件,推薦使用 lob類型。 Blob 二進制, Clob 文本,bfile 外部儲存。
三 關於人造建:
人造鍵一般會比天然鍵帶來更好的性能。
他一般由一個數字類型構成。
相比天然鍵,會減小錶鏈接的開銷和索引查詢的開銷。
邏輯模型不要一對一映射到物理模型,邏輯主要考慮功能的實現,物理 主要考慮 性能和儲存方式,,這樣能夠大大節約之後調優的時間。!!
四 關於表類型的選擇
後談
五 關於null 值
普通索引不要存null,null不會走索引,只能全表掃。
組合索引 和位圖索引能夠儲存null。
採用null能夠下降行的平均長度,從而必定程度上提升全表掃描的性能。
將查詢null 更改成查詢一個默認值,就是爲了走索引。!!
null值的儲存須要一個字節的儲存空間。
六 列的順序
訪問靠後的列,比靠前的列 須要額外消耗少許的CPU資源。 基於此,把常常訪問的列放到前面會帶來少許的性能提高。
七 反規範化
1. 複製列值
主要爲了不使用錶鏈接進行查詢。
三 物理方面
物理存儲方案
1. 當往表中插入新紀錄的時候,oracle須要掃描空閒數據塊鏈表。 ASSM 可以自動的很好的完成 空閒數據快鏈表 以免 鏈表爭用。針對對插入事務頻繁的表。
2. 經過合理設置pctfree 來避免行遷移。數據走,留指針。
3. 在一個事務更改一個塊的時候,會得到事務槽,若是事務槽沒法自動增長分配,那麼事務將會等待。
4,數據壓縮,基本都是說的可以提升全表掃描的性能,個人理解是對於範圍掃描,也能夠提升性能。 字符串的壓縮率大於數字類型,對磁盤中數據的壓縮收益要大於對內存中數據的壓縮。
5 關於lob
通常儲存超過4000字節的數據,不然用varchar2來儲存。 一般狀況下,Lob數據不會跟同一行記錄的其餘列儲存在相同的數據塊中,只有lob對象不到4000 ,才inline儲存。
控制方式: enable/disable storage in row。
若是LOB字段是常常須要訪問的字段,那麼建議仍是採用inline儲存。由於訪問外部儲存 的lob須要額外的IO。
請設置db_securefile參數, 能夠將新的lob列的默認儲存方式設置爲 secure file。
6 關於分區
分區主要在與2點, 分區消除,便於管理歷史分區數據而不影響當前分區。
關於設計原則,就是以上內容,轉載:http://blog.csdn.net/familyrun/article/details/47037393
關於細節規範: