DB2解決鎖升級經驗

>1。 初步判斷是select較多,還是insert較多
>如果是select較多,建議建立索引;
>如果是insert較多,則建立索引不一定能提高效率,反而相應的操作要在索引和表上
>進行兩次,降低了效率。可以insert之後再建立索引。
>[索引設計建議]
>缺省情況下建立的索引是非集羣索引,但有時並不是最佳的;
>合理的索引設計要建立在對各種查詢的分析和預測上.
>(1) 有大量重複值、且經常有範圍查詢(between,>,<,>=,<=)和order by、group by
>發生的列,可考慮建立羣集索引;
>(2) 經常同時存取多列,且每列都含有重複值,可考慮建立組合索引,注意:要儘量
>使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁列;
>[解釋]:
>(1) 在非羣集索引下,數據在物理上隨機存放在數據頁上,在範圍查找時,必須執行
>一次表掃描才能找到規定範圍內的全部行;
>(2)在羣集索引下,數據在物理上按順序在數據頁上,重複值也排列在一起,因而在範
>圍查找時,可以先找到規定範圍的期末點,且只在這個範圍內掃描數據頁,避免了大
>範圍掃描,提高了查詢速度。
>
>2。對於Select操作
>儘量不要使用"select *",這樣會執行對整個表的查找;
>[出現位置]
>      在提供的唯一一段select的操作的SQL語句中,出現了迭代的"select *
>from"操作;
>[改進]
>      最好是根據表中的名稱,顯示地查找每一列。
>
>3。對於where子句的連接順序
>表之間的連接必須寫在其他where條件之前,那些可以過濾掉大量記錄的條件必須寫在
>where子句的末尾。
>[出現位置]
>      在提供的四段語句中,出現了大量的左連接(left join)操作和where操作
>[改進]
>      對於where子句,將可以過濾掉大量記錄的條件寫在最後,依次類推;儘量減少
>進行left join的記錄的條數。
>
>4。group by優化
>在提供的四段語句中,大量存在group by語句
>[改進]
>      可以將不需要的記錄在group by之前過濾掉。
>
>5。避免在索引列上使用IS NULL和IS NOT NULL
>[出現位置]
>      在提供的SQL語句中,出現了一些IS NOT NULL,如果在這些列上已經建立了索
>引,該語句將會造成索引失效。
>[改進]
>      可以根據該列的值的屬性修改,例如,如果是整型,可以改爲>=0。
>
>6。儘量多使用commit
>只要有可能,就在程序中對每個delete,insert,update操作儘量多使用commit,這
>樣系統性能會因爲commit所釋放的資源而大大提高。
>
>--------------------------------------------------------------
>此外,db2中有分析SQL語句的工具 Visual Explain (db2expln)
>你可以在圖形界面下使用控制中心 - > 右鍵點擊相應的數據庫 - > 選擇"說明
>SQL"(Visual Explain).
>或者在命令行的方式下,執行db2expln.
>
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章