楊瑩 遼寧錦州渤海大學信息科學與技術學院
基于Oracle數據庫大數據的檢索優化分析與設計
楊瑩 遼寧錦州渤海大學信息科學與技術學院
文中基于Oracle數據庫采用各種檢索優化方法來提高數據庫的響應速度:合理設計表字段存儲結構、合理建立索引技術、表分區技術、優化SQL檢索語句等技術手段實現數據庫的檢索優化。本文研究關于如何優化數據庫檢索性能優化方案,通過分析影響檢索優化因素提升系統性能,確定本文檢索優化方案的目標,期望通過本文檢索優化方案達到最優化,另外,基于分頁顯示檢索到的全部查詢結果在某種程度上是為了提高檢索速度。
Oracle數據庫 大數據 檢索優化 表分區技術 SQL優化 索引技術
目前,隨著Oracle數據庫不斷應用深入大型應用系統的基礎架構中,作為軟件系統的運行的骨架,用戶的訪問量指數上升,數據庫需要同時高并發處理用戶請求瞬間達到極限,數據庫數據處理性能迅速下降,在大型數據庫中,用戶請求檢索的等待時間過長、占用系統CPU資源過多是當前系統面臨最大的問題問題。因此,對大型數據查詢需求有必要進行檢索優化操作。根據本文研究需要優化系統的檢索性能,在滿足用戶使用的前提下,對其檢索性能的優化操作,使數據庫的運行處于最優狀態。
對硬件的改進也是提高檢索速度的有效方法,例如:更換或升級性能更優秀的服務器,但是本文中僅對軟件編程方面實現的檢索優化研究。以Oracle研究對象,主要采取使用建立索引、表分區、優化SQL語句等技術手段以系統的提高檢索速度,從而達到實現優化數據庫的邏輯結構。
合理建立索引是為了達到快速檢索數據,索引建立在數據表的非空列上,當某列建立索引之后,每次對該索引列發生修改操作之后需要根據索引值進行重新排序,目的是為了以后方便對該列進行檢索數據操作。因此,在建立索引結構時需要把某個索引列設置在經常進行查詢操作的列,并不是經常實現動態修改列之上。關于大型數據表建立索引結構需要注意:
(1)建立索引目的方便數據檢索,但是要時刻維護索引列的代價;
(2)為了檢索數據表中唯一的一行數據,不可避免的掃描整個數據表;
(3)由于多個表中有可能存在錯誤的索引列,最終導致多表聯查檢索發生等待時間過長的現象。
Oracle數據庫中為了達到高效的檢索速度,建立表的分區技術是針對具有大數據的應用系統而言,大型數據表進行檢索優化是一種多種優化方案中選擇最佳的行為,理論上是將一個完整大型數據表實現物理上分區,但是,從邏輯結構上依然是完整的大型數據表,系統管理員或者用戶看不出其中有什么變化,數據庫系統的設計人員需要知道數據存儲位置即可,只要程序設計人員從邏輯上將其當成完整的大型數據表即可。為數據庫系統增加了可用性與靈活性。
3.1 實現表的分區方法
Oracle數據庫實現數據表的分區方法主要有多種:一是按照表存儲字段值范圍實現表分區方法;二是按照表存儲字段的HASH函數值實現表的HASH分區方法;三是按照字段的數據范圍進行表分區劃分,必要說明的是按照數據范圍實現的分區劃分需要有限的值范圍,再根據HASH函數值實現二次分區方法;四是在Oracle數據庫中增加了按找表存儲字段列值實現分區方法。
在本文的數據庫表分區實驗中,針對馬路上車輛行走記錄表中的過車時間存儲字段實現表的分區方法,每月的行車記錄數據實現一個分區表,如果按照某個行車時間進行檢索數據時,會大大增加數據庫系統的檢索速度。本文的數據庫表分區實驗中,行車記錄分區表的SQL語句如下:


3.2 表實現分區的優點
通過對大型數據表實行分區之后,可以獲得下面的幾點有點如下:
(1)表的操作性增強:如果大型數據表的某個分區出現問題,數據表的其他分區依然可用。
(2)維護表的分區方便:如果數據表的某個分區出現問題,需要維護表的分區數據,只修改出現問題的分區即可。
(3)均衡數據庫系統的I/O操作:可以根據表的不同分區映射到低速磁盤上以平衡數據庫I/O操作,以改善整個數據庫系統的檢索性能。
(4)改善檢索性能:對表的分區對象的檢索行為可以實現僅對檢索本身屬于該表分區的一些數據,在部分數據中實現檢索操作,不但提高檢索速度,而且檢索數據精準。
當表分區所執行的事務操作時,系統會指定了大型數據庫的某個分區,大型數據庫系統在執行特定事務時則只檢索該分區的全部數據,大大地提高了數據檢索的速度。不需要指定數據表的某個分區檢索操作也可實現。
4.1 優化應用系統的SQL語句技術
在數據庫系統中實現數據檢索行為,程序員可以編寫多種可執行的SQL語句實現對需求數據進行檢索,因此,優化SQL執行語句就是為了提高數據的檢索效率,把低效的SQL語句替換為可以實現高效執行、檢索的SQL語句。優化SQL語句的目的主要是進行數據檢索等價替換操作,主要是從數據庫數據檢索語句將用戶提交所執行的SQL檢索語句替換為高效的方式。優化SQL語句的一些方法:
(1)盡量為表數據結構建立索引;
(2)選擇在多種數據表聯合檢索數據的次序;
(3)數據檢索過程中,要盡量子查詢時慎重使用IN或者NOT IN關鍵字,當大數據檢索過程中,當使用where NOT exists檢索效果要比其他語句好;
(4)非特別的情況下禁止使用視圖的實現關聯檢索數據,尤其非常復雜的視圖關系的管理檢索;
(5)盡量避免在SQL執行語句中使用PL/SQL函數調用;
(6)避免對大數據庫實現遠程數據表的訪問;
(7)在where子句中包含索引列時,盡量使用UNION代替OR關鍵字;
(8)優化GROUP BY關鍵字,將不需要排序的列在GROUP BY之前去除;
優化Sql語句的方法有多種,在這里只是重點強調優化Sql語句的使用方法,對于具體的檢索優化方法還需要根據實際情況而定,在此不再具體贅述。
4.2 優化數據庫的SQL語句
在數據庫系統中實現數據檢索功能時,往往通過本文檢索優化方法達到一定的效果,但是,在大數據的檢索過程中,程序員往往使用分頁檢索技術來提高系統處理的檢索速度。分頁檢索的技術原理就是通過先執行SQL語句后過濾掉大部分檢索數據,只將滿足需求的部分數據檢索出n(一般情況下n值不會超出20條)條數據,如果用戶對已經檢索的部分數據不夠滿意,則需要檢索其他的后n條數據達到檢索數據的目的,通常在應用系統中有“首頁”、“上一頁”、“下一頁”、“尾頁”等按鈕,可點擊“下一頁”按鈕方可檢索后n條數據而不必將全部的數據調入到內存中。
針對本文所研究的數據檢索優化內容,下面專門做了一個關于數據檢索與優化的測試,根據測試優化結果進行分析,本文的測試數據接近上百萬條數據量。當應用系統的檢索功能未實現優化之前,在同樣的數據庫表的數據內容,檢索時間大致為6到8秒,通過本文研究的數據檢索與優化方法實現的應用系統優化之后,檢索速度比之前縮減到幾十毫秒即可實現相同的檢索內容,數據庫系統的檢索速度瞬間提高了數十倍的效果。表1是實現對數據表建立索引測試分析情況,表1數據表中數十萬數據量的有無索引測試分析表。

表1 數據表中數十萬數據量的有無索引測試分析表
當將表1的數據檢索過程使用分頁技術處理時,會在表中建立索引的情形下的檢索時間都減少1毫秒左右,這樣可以大大的提高數據庫系統的檢索速度,增加用戶體驗。
本文中主要是從數據庫與應用系統對檢索優化技術的重點論述,例如:如何建立表的索引技術、實現表的分區技術、優化SQL執行語句技術以及在大型數據表中的數據檢索分頁技術等等。另外,當應用系統的軟件部分全部實現檢索優化操作之后,并沒有其他的優化之處,還可以通升級硬件配置來提高數據庫系統的檢索速度。
[1]周彥,陳梅,王翰虎,等.基于層次位圖連接索引的數據倉庫查詢優化[J].計算機技術與發展,2011,21(3):41-43
[2]王君,祝永志,魏榕暉,等.基于Oracle分布式數據庫的查詢優化[J].計算機技術與發展,2008,18(1):157-160
[3]楊小艷,尹明,戴學豐.Oracle數據庫查詢優化方法研究[J].計算機與現代化,2008(4):4-7