摘要:通過SQL語句優化后查詢速度可以得到有效的提升。
關鍵詞:SQL語句;查詢速度;查詢優化
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2008)20-30200-01
SQL Statement in Improving the Optimization of Data Query
MA Li-ming, WANG Shou-tao, XU Yan-lei
(Central Hospital in Ma'anshan, Information Center, Ma'anshan 243000, China)
Abstract: Can get effective lifting by the fact that the SQL sentence optimizes the queen inquiring about speed.
Key words: the SQL sentence; inquires about speed; inquires about an optimization
在醫院數據庫的管理和應用中,查詢是數據管理的最基本操作之一,大多數其于SQL語句環境的管理員來說,令他們頭痛的問題往往是由于所用的SQL查詢語句不夠優化導致工作效率降低,過多占用系統資源,從而且影響了整個系統的運行效率。因此SQL語句的優化管理在提高數據查詢速度中就變得尤為重要。
1 SQL查詢語句的優化
人們在使用SQL時往往會陷入一個誤區:太關注于所得的結果是否正確,而忽略了不同的實現方法之間可能存在的性能差異。這種性能差異在大型的或是復雜的數據庫環境中表現得尤為明顯。低效率的SQL語句導致不必要的表掃描。SQL語句優化或用一個索引往往可以避免這樣的情況發生,提高查詢效率。在運用SQL語句優化中,盡可能把數據庫的一些操作放在數據庫服務器上進行,這樣可以減少網絡傳輸帶來的瓶頸。我們在查詢病人費用,按省物價局要求除費用明細顯示外還必須顯示各類項目的類別、代碼、規格等信息,這就要求設計聯合幾張表的查詢,該查詢中就用到了SQL語句的優化。
我們用到了大量了SQL語句的優化,有的語句通過優化后查詢速度甚至提升了5-6倍,下面以表格的形式列舉幾中SQL語句優化的應用。
2 使用臨時表加速查詢
數據庫邏輯設計時,依據規范化理論把數據劃分成多個相關的表。但隨著規范化程度的增加,查詢時要求聯接的表的數目和復雜性也隨之增加,系統復雜的聯接運算將影響整體性能。另外對于某些查詢要求,使用單個查詢語句獲得查詢結果是較困難的工作,特別是對于大型數據庫系統,不容易檢查查詢結果,要確定查詢的正確與否非常困難。針對這些情況,通過引人臨時表來簡化查詢。
把表的一個子集進行排序并創建臨時表,可以加速查詢。它有助于避免多重排序操作,而且在其他方面還能簡化優化器的工作。例如:
select patient_id,dept_code,dept_name,charges from dept_dict,inp_bill_detail where dept_dict.dept_code=inp_bill_detail. performend_by and inp_bill_detail.charges<0 order_by dept_dict.dept_code
這個查詢要被執行多次而不止一次,可以把按執行科室統計的退費病人按序找出來,放在一個臨時文件中,并按科室進行排序:
select patient_id,dept_code,dept_name,charges from dept_dict,inp_bill_detail where dept_dict.dept_code=inp_bill_detail. performend_by and inp_bill_detail.charges<0 order_by dept_dict.dept_code
into temp refundment
然后以下面的方式在臨時表中查詢:
SELECT * FROM refundment
臨時表中的行要比主表中的行少,而且物理順序就是所要求的順序,減少了磁盤I/ O 次數所以查詢工作量可以得到大幅減少。
使用臨時表時要注意對它的更新操作,以保持與原始表之間數據的一致性。使用完畢后,應對其刪除,釋放其所占用的空間。
當然數據查詢速度的提高不僅僅依賴于SQL查詢語句的優化,同時服務器、網絡設備、等硬件設備環境也是十分重要,它們直接影響到查詢的效率。
參考文獻:
[1] 蓋國強. 循序漸進Oracle——數據庫管理、優化與備份恢復[M]. 北京:人民郵電出版社,2007.366-389.
[2] Price, J 翻譯. 馮銳,由淵霞. Oracle Database 10g SQL 開發指南[M]. 北京:清華大學出版社,2005.123-215.