3.db2性能和优化
“db2中有分區(qū)、表空間、日志空間等的概念,所以在操作db2數據庫時候,注意以上的設置,會大大提升sql的運行速度,也方便管理人員的管理和維護。了解其原理后,你會發(fā)現(xiàn)db2是典型的分布式集群”
1.db2的存儲結構
假設倉庫主機現(xiàn)在有40個節(jié)點,節(jié)點號為0-39升序排列,40個節(jié)點,即有40個分區(qū),每個分區(qū)大小一致,且每個分區(qū)都有自己的表空間和日志空間。
2.指定表空間
表空間是存儲表里數據記錄的地方。
3.指定分區(qū)鍵??partitioning key
分區(qū)鍵的作用:在向表里面insert或者load數據時,是通過哈希算法根據分區(qū)鍵來計算出節(jié)點號,然后把分割的數據送往此節(jié)點,然后裝入數據。
分區(qū)鍵的指定:指定分區(qū)鍵時一般要指定那些此列數據內容有很大差異的那些列,比如手機號碼,id_no等,這樣計算出的節(jié)點號分布比較均勻,數據才能均勻分布存放在40個節(jié)點。
不指定分區(qū)鍵:如果建表的時候沒有指定分區(qū)鍵的話,系統(tǒng)默認使用表的第一個字段,分區(qū)鍵未指定或者分區(qū)鍵指定不恰當,會導致情況。
4.增加一個列
Alter table tab_tmp add column ph varchar(11)
說明:列增加后將不能刪除。DB2中列加上后數據類型也不能改變,唯一能改變的是增加varchar類型的長度,只能增大。
5.修改表名
Rename? bug.temp_tab? to temp_tab2;
說明:temp_tab2不存在,方可執(zhí)行成功。并且temp_tab2不加前綴,修改成功后表名為:bug.temp_tab2。
6.創(chuàng)建視圖
create view? as select id_no,phone_no from com.com_result_tab where ...
說明:視圖唯一能修改的是引用類型列,改變列的范圍。其他定義好了都不能修改。當視圖基于的基表drop后,視圖變?yōu)闊o效。創(chuàng)建視圖,可以修改字段名稱,對原表信息是一種保護。
7.表的左連接?left join。以及左表的選擇。
選擇1:?數據量小的表作為左表(業(yè)務邏輯允許的情況下)。
選擇2:將使用條件篩選的表作為左表。
選擇3:具有索引選擇操作的表作為左表,否則每掃描左表中的一行,就要掃描一遍整個表。
選擇4:重復記錄少的表更趨向于作左表。
選擇5:外關聯(lián)時,on后面僅僅存放關聯(lián)條件(也就是說必須是左右表的字段比較),對于關聯(lián)表內部的條件應當放在where子句中,除非你想保留所有沒有匹配上的記錄。
8.盡量不使用in(select id_no from tabs...)
9.表連接是一定注意兩個字段類型是否相同
比如A表,id_no 類型為bigint;?B表,id_no 類型為varchar();? 此時以id_no作為連接條件,速度特別慢。
?
原因1:當連接兩個不同類型的列時,其中一個列必須轉換成另一個列的類型,級別低的會被轉換成高級別的類型,轉換操作會消耗一定的系統(tǒng)資源;
原因2:如果你使用兩個不同類型的列來連接表,其中一個列原本可以使用索引,但經過轉換后,優(yōu)化器就不會使用它的索引了。
10.在查詢中盡量不要使用or
使用union合并兩個不同的查詢結果集,這樣查詢性能會更好。
如果不是必須要不同的結果集,使用union all效果會更好,因為它不會對結果集排序,去重。88
11.更新表統(tǒng)計信息
Runstats的作用是重新更新數據庫系統(tǒng)對表的統(tǒng)計信息,這些信息在數據庫生成執(zhí)行計劃時將被使用。
12.整理表存儲碎片
如果一個表的數據量變化很多,與操作系統(tǒng)的文件系統(tǒng)一樣就會產生存儲碎片,需要重新收集數據碎片和分布數據,從而提高數據訪問效率。
reorg table tab_name
另外可以通過reorgchk on table…來檢查碎片是否需要整理
13.在大數據量插入操作
可以采用不寫日志方式,
一般情況下插入數據時必須避免插入笛卡爾集
注意:但如果執(zhí)行被中斷,表將損壞,無法使用。
14.為避免鎖沖突,可以采用臟讀模式
前提對數據一致性要求不高
---------------------------------------------------------------------------------------------完美分割線----------------------------------------------具體操作。
1.當前庫連接其他庫
?db2 connect to db_name user db_id using db_pwd
?說明:密碼得問相關的管理人員,我們無法查看。name和id通過鍵入conn就可以顯示。
2.創(chuàng)建視圖
3.學會建立臨時表
? ? ? ?假設有三張或者三張以上的表進行連接,而且每張表的數據量都不小,此時就建立一張臨時表,將其中的兩張表關聯(lián)的結果插入臨時表(tab_temp1),之后再與其他表進行關聯(lián)。
??? ? ?說明:數據量小的時候,看不出臨時表的作用,但是數據量很到的時候,臨時表可以避免讓你等的很焦灼。
3.大量數據的插入操作
大量數據插入臨時表中,采用不寫日志的方式,避免日志滿了。被force后,事務日志回滾,造成i/o繁忙。
4.對數據表進行過更新操作后記得commit
eg:insert into ;merge into;delete;update
顯示提交事務,釋放事務日志。
5.長時間不使用數據庫記得斷開數據庫連接。
6.自己建立的臨時表使用完之后記得刪除
第一步:清空表數據
第二步:刪除表
7.查詢數據進行限定,一定不要select * from?
8.初次碰見自己不知道的表,不要進行update 或者delete 操作,可以自己建立臨時表玩。
轉載于:https://www.cnblogs.com/bug-mark/p/8631013.html
總結
以上是生活随笔為你收集整理的3.db2性能和优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实践篇:利用函数计算轻松构建全文检索系统
- 下一篇: server 2008 R2 使用笔记