施元超
同濟大學軟件學院,上海 201804
金融管理軟件中大型數據庫性能優化策略研究
施元超
同濟大學軟件學院,上海 201804
為了提高金融領域中大型數據庫應用系統的性能和效率,縮短大批量數據的處理時間,本文深入研究了提高數據庫系統性能的策略。首先,分析了數據庫分區操作技巧;其次介紹了影響SQL語句性能的因素;然后結合實例說明了利用索引的SQL優化技巧;最后總結了SQL性能優化的意義。
大批量數據;分區;索引;SQL優化
根據研究顯示,金融領域軟件系統的數據庫都存儲著數以億計的記錄,因此,數據庫應用系統性能問題尤為突出。當用戶每次操作的數據量在幾十萬記錄時,全表掃描一次往往需要數10min,但可能只需返回幾條記錄。此時,怎樣減少數據吞吐,對數據庫性能優化就成為關鍵。
在大量數據處理的項目中,可使用分區表來提高系統的性能并方便數據管理。金融領域的數據庫應用中,要處理的數據量通常可達到GB級。為了使數據在讀寫操作和查詢更快,數據庫提供了對表和索引的分區技術。
分區的優點:增強可用性、維護方便、均衡I/O、改善查詢性能。因oracle在金融領域的廣泛應用,本文以oracle舉例。
Oracle提供的分區方法有:范圍分區、散列分區和復合分區。
金融管理軟件中業務數據多以日期或交易序號組織,所以可采用范圍分區。通常根據交易序號或業務日期范圍分區,有時也采用復合分區,例如先根據日期再根據交易編號分區。
注意,在進行分區表操作時,最好指定分區,因為指定了分區,系統執行時只操作該分區的記錄,提高了處理的速度。
SQL操作大約消耗70%~90%的資源,它獨立于程序設計邏輯,改進SQL是最好、最安全的提高性能的途徑,SQL的優化時間和風險成本都很低。
影響SQL性能的因素很多,有幾個主要原因:書寫不規范,它會導致SQL語句不必要的重復解析;未充分利用數據庫的功能,如查詢的并行化處理;過多的I/O操作,如未不恰當使用索引導致全表掃描;高頻處理垃圾記錄,如多表連接時過濾條件位置不當導致中間結果集包含太多的垃圾記錄。
過多的I/O操作會占用CPU、消耗大量內存,而優化I/O最好的辦法是用索引掃描代替全表掃描。
1)建立索引的原則:(1)在主鍵、頻繁被訪問的列和經常被連接(非外鍵)列上建聚簇索引,當所有值唯一時,定義唯一索引;(2)有大量重復值,經常有范圍查詢、排序、分組的列建立聚簇索引;經常同時存取多列,且每列都有重復值建復合索引來覆蓋查詢,把引用最頻繁的列作為前導列;并盡量使關鍵查詢形成覆蓋查詢;(3)條件表達式中經常用到的不同值多的列建索引。
2)避免不合理使用索引
通過建立索引,一般都會加快查詢速度;但當oracle優化器在執行時不當使用索引時,會得到反效果。例如:

假設:當每個表有幾萬條記錄,兩表都未建索引,2s就可查出結果。而當在A表中建立復合索引(復合索引里包含 tradedate字段)數據庫會用索引,這時查詢要幾分鐘。所以索引使用不當會嚴重影響語句性能。下面給出幾個優化方法:
1)直接去掉索引,這不是好方法,別的查詢可能需要這個索引。
2)改寫where語句: WHERE TRIM(A.TRADEDATE) =b.TRADEDATE兩三秒即出結果。因為oracle默認有函數的字段不用索引,查詢語句忽略索引,仍全表掃描。

3)在B表里建index(tradedate,account),改為執行時間為半秒。因為Oracle默認使用前表索引,例中只會使用B表的有效索引。
3)應用基于函數的索引
基于函數的索引(FBI)提供了索引計算列,并在查詢中使用這些索引的能力。FBI的實質是對查詢所需中間結果進行預處理。如果一個FBI與查詢語句中的內嵌函數完全匹配,CBO在生成查詢計劃時,將自動啟用索引范圍掃描替換全表掃描。函數越復雜,基于該函數創建FBI對SQL查詢優化作用越明顯。
4)強制使用索引,利用oracle的并行功能
Oracle對全索引掃描有如下限制:SQL請求的全部列必須駐留在索引樹中;即SELECT和WHERE子句中的所有數據列必須存在于索引中。Oracle提供了SQL提示強制全索引掃描??芍付╥ndex_ffs提示強制快速索引掃描,這常與parallel_index提示組合。下面查詢強迫使用并行快速全索引掃描提高效率,

查詢優化是取得良好執行性能并簡化管理的關鍵因素,而對于交易數據成百萬計的金融軟件尤為重要。優化SQL,關鍵是索引,怎樣合理利用索引是一個復雜深刻的問題。本文其進行簡單總結,希望對開發人員幫助查詢優化器獲得更好的執行計劃有所幫助,這些執行計劃是查詢優化器無法靠自身獨立工作產生的。
[1]王振輝,等.基于關系數據庫的SQL查詢語句執行過程效率分析與對策.計算機時代,2008.
[2]豢葵.SOL語句的查詢優化分析.華南金融電腦2004.
[3]Beth Van Hom,Mark KorrS.優化SOL查詢語句的經驗.Oracle應用開度論文集,1992.
[4]徐立溥.淺談ORACLE數據庫的優化及提升.硅谷,2009.
[5]韓中華,等.動態SQL在企業綜合管理系統中的實現.自動化與儀表,2008.
TP31
A
1674-6708(2010)24-0206-02