資料庫設計
設計的原則
1、熟悉需求
2、符合開發規範
命名規範
明確實體與資料表的關係
不能即沒有主鍵也沒有外來鍵
3、審核資料庫設計
4、基本表的特徵
1、原子性:字段不能再分解
2、原始性:是對原始資料的記錄,不是拼
接出來的資訊
3、演繹行:有基本表和關係表中的
資料,可以派生出任何想要的資料
4、穩定性:相對穩定,長期儲存
5、必須滿足一二正規化,盡量滿足第三正規化
第一正規化:對屬性的原子性約束,不可再分
第二正規化:記錄的唯一性約束,即必須有主鍵
第三正規化:對欄位冗餘的約束,乙個表中的字
段不能包含其他表的非主鍵字段
6、簡潔地e-r圖
7、符合完整性約束
設計的模型
關係模型er 強調關係
物件模型or 強調的是實體的個體
設計的技巧
1、表越少越好,表中的組合主鍵的字段越少越好、欄位越少越好
2、檢查變化字段
3、避免使用資料庫保留字
4、採用刪除標記字段代替刪除
5、避免使用觸發器
6、發現在輸入時重複資料,則需要建立新的表核心的關係
7、使用資料庫設計工具
8、建立er圖表和資料字典
9、新增字段修改記錄時間、修改人、修改後的版本
10、位址和**採用多個字段
sql優化
劣質sql 對系統產生不好的影響的sql
1、執行時間超長
2、引發嚴重的等待時間
3、不能滿足壓力測試
4、消耗大量的系統資源
索引使用索引可以快速訪問資料庫表的特點資訊
問題1、占用表空間
2、影響dml效能
使用的條件
1、乙個欄位中包含大量的值
2、乙個欄位中包含多個空值
3、多個字段經常出現在where中
4、表非常大並且查詢返回的資料量低於總資料的20%
索引的建立
create index 索引名 on 表名(列名) tablespace 表空間名
索引型別
列值唯一性
唯一索引
非唯一索引
索引列個數
單列索引
復合索引,第乙個列為主導列
使用情況
當sql語句時where字句用到復合索引的主導列
當某幾個列在sql語句的where字句通常用and連在一起使用
當sql常常查詢幾個同樣的列值時
索引列物理組織方式
b樹索引 適用於列中資料較多的情況
反向鍵索引 用於大的集群系統,多使用者操作統一資料塊
create index 索引名 on 表名(列名) reverse tablespace 表空間名
基於函式的索引 基於乙個或多個列上的函式或表示式建立的索引
用於乙個表中的字段經常被函式所呼叫的情況
create index 索引名 on 表名(函式(列名)) tablespace 表空間名
位圖索引 處理資料的聚合關係,用於重複資料較多的情況
create bitmap index 索引名 on 表名(表名(列名)) tablespace 表空間名
表分割槽應用場景
為了提高資料的可用性,檔表內容或者結構非常大的時候
優點1、提高資料可用性
2、減少管理負擔
3、改善語句效能(減少併發)
分割槽方式
區間分割槽 根據乙個列值得範圍劃分
rertition by range(列名) (
partition 分割槽表名 values less then
(值) tablespace 表空間
)less then 表示小於
values less then (maxvalue)表示其他
//**********==例項******************************====
create table 表名 (
dt_draw date not null
)rertition by range(dt_draw) (
partition 分割槽表名 values less then
(to_date('31/12/2008','dd/mm/yyyy')) tablespace 表空間
)雜湊分割槽 對分區間應用乙個雜湊函式,依次確定
應放在n個分割槽的哪乙個分割槽
分割槽表的樹木間以為2的n次方
rertition by hash(列名) (
partition 分割槽表名 tablespace 表空間
)//**********==例項******************************====
create table 表名 (
dt_draw date not null
)rertition by range(dt_draw) (
partition 分割槽表名1 tablespace 表空間1,
partition 分割槽表名2 tablespace 表空間2,
partition 分割槽表名3 tablespace 表空間3
)列表分割槽 將資料按照列的值分割槽
rertition by list(列名) (
partition 分割槽表名 values (指定值1,指定值2) tablespace 表空間
)//**********==例項******************************====
create table 表名 (
dt_draw date not null
)rertition by list(dt_draw) (
partition 分割槽表名 values (指定值1,指定值2),
partition 分割槽表名 values (指定值3,指定值4),
partition 分割槽表名 values (指定值5,指定值6)
)tablespace 表空間
組合分割槽 之前分割槽方式的組合
區間雜湊組合
partition by range(列1) subpartition by hash (列2) (
partition values less than (值) tablespace 表空間 ,
)區間列表組合
partition by range(列1) subpartition by list (列2) (
partition values less than (值) tablespace 表空間 (
subpartition 子分割槽名 values (指定值1,指定值2) tablespace 表空間))
維護方式
增加分割槽
alter table 表名 add partition 分割槽表名 values less than (值)
注意,不能包含小於最大分割槽分割槽條件的分割槽
刪除分割槽
alter table 表名 drop partition 分割槽表名
截斷分割槽 刪除分割槽中的資料
alter table 表名 truncate partition 分割槽表名
合併分割槽
alter table 表名 merge partitions 要合併的分割槽 into partition 合併到的分割槽
注意,高接線不能合併到低接線
分割槽維護
sql語句的優化
1、選擇合適的oracle優化器
cbo 基於成本優化的優化器
優化模式
rule 基於規則
choose 預設,有統計資訊cbo,否則,rbo
first row 以最快的速度返回前幾行
all rows 以最快的速度返回所有行
2、選擇恰當的查詢方式
方式全表掃瞄
rowid掃瞄 單行資料
索引掃瞄 cbo下有效,索引中直接得到的資料
快速索引掃瞄
3、善於利用共享sql語句
存放在sga中,系統全域性中
Oracle Sql優化筆記
基本的sql編寫注意事項 需要注意的是,隨著oracle的公升級,查詢優化器會自動對sql語句進行優化,某些限制可能在新版本的oracle下不再是問題。尤其是採用cbo cost based optimization,基於代價的優化方式 時。我們可以總結一下可能引起全表掃瞄的操作 oracle優化器...
Oracle Sql優化筆記
基本的sql 編寫注意事項 需要注意的是,隨著oracle的公升級,查詢優化器會自 動對sql語句 進行優化,某些限制可能在新版本的oracle下不再是問題。尤其是採用 cbo cost based optimization 基於代價的 優化方式 時。我們可以 總結一下可能引起全表 掃瞄的操作 or...
Oracle Sql優化筆記
基本的sql編寫注意事項 需要注意的是,隨著oracle的公升級,查詢優化器會自動對sql語句進行優化,某些限制可能在新版本的oracle下不再是問題。尤其是採用cbo cost based optimization,基於代價的優化方式 時。我們可以總結一下可能引起全表掃瞄的操作 oracle優化器...