祁星 孫琳 周治宇 南京市口腔醫院
淺析我院數據庫系統中SQL語句優化
祁星 孫琳 周治宇 南京市口腔醫院
經過多年的努力,我院通過大量的資金和技術的投入,已經逐步變為全面信息化的現代化醫院。已經由原來的收費、記賬為主,逐步向臨床醫療、服務病人過渡。最近幾年,在原有醫院信息系統(HIS)、實驗室信息管理系統(LIS)以及影像歸納和通信系統(PACS)的基礎上,新增了很多其他系統,尤其以門診電子病歷(EMR)為首,大大增加了數據庫的數據量。對此,在寫入和讀取數據庫的時候,圍繞數據庫的SQL語句的優化就顯得尤為重要。
醫院信息系統 數據庫 SQL
醫院經過多年信息化建設后,取得了顯著成效,信息化由原來簡單的以收費為主,逐步向臨床醫技發展,各個醫技科室的獨立系統聯系為全院共享,特別是隨著我院門診電子病歷的發展和普及,加上辦公軟件的深入,一定程度上達到了就診與工作無紙化的程度。加上我院本來就有的HIS、LIS、PACS等大數據庫,數據庫的數據量大大增加。醫院的業務數據逐漸增加,這給我院的服務器帶來了很大的壓力。醫院屬于服務行業,數據的準確性和安全性很重要,不容有半點意外出現。這就給我們醫院的信息部門的人出了很大的難題,例如我院的PACS,每日都有大量的牙片要拍,針對增加的數據我們定期的做好備份遷移。
傳統的數據庫性能優化主要從操作系統、客戶端應用軟件程序設計、網絡及其它硬件設備等方面來考慮,這種方法一般都是調整數據庫配套的硬件設備,這在一定程度上能暫時緩解問題,但是這往往需要購買千萬級別的設備,付出的是高昂的成本投入。久而久之隨著數據量的增加和更多功能的開發還是會導致系統速度變慢,而不能從根本上解決問題。本文提出的醫院數據庫系統性能優化是在已有的硬件設施升級、數據庫的物理設計、關系規范化等方面進行改進基礎之上,對SQL語句進行了有效的分析設計的問題,以使其加快執行速度,減少網絡傳輸,能更高效地工作,充分發揮系統的效率。
2.1 索引的建立
優化索引是提高數據庫查詢速度最好的方法。索引是建立在實體表上的一種數據組織,它可以提高訪問表中一條或多條記錄的查詢效率,索引的使用可以有效避免全表掃描,提高查詢速度,在大型的表中進行索引的建立對加快表的查詢有著重要的意義。但是并不是所有的表都需要建立索引。索引通常可以提高select、update以及delete語句的性能,但是會降低insert語句的性能,所以索引的使用要恰到好處。索引的建立使用需要參考很多原則。建立索引一定要慎重,每個索引在建立之前都要仔細分析,一定要有建立的依據。過多的索引或不充分、不正確的索引對提升數據庫的性能毫無益處。
2.2 SQL語句優化
SQL語言是一種靈活的語言,相同的功能可通過不同的語句表達來實現。但不同的語句在執行效率上存在巨大的差別。對此,任何一個數據庫應用系統中,SQL語句進行合理優化將大大的提高整個數據庫系統的性能。SQL語句執行過程中分三個階段,分別是進行處理語法分析、執行、讀取數據SQL語句執行過程在復雜的數據庫環境中使用SQL時,明顯的能感覺到一些性能上的差別。例如在我院HIS的一些大型表中表現尤為明顯。SQL語句執行效率低下的原因主要來自于不恰當的索引設計、不充分的連接條件和不可優化的WHERE子句及其它不恰當的語句操作等,在對它們進行適當的優化后,其運行速度有了明顯提高。下面將從這幾個方面分別進行說明:
2.2.1 LIKE操作符
LIKE操作符可以應用通配符查詢,里面的通配符可以滿足任意查詢的要求,但用的不好會產生性能上的問題,例如like 'a%'使用索引,like ‘%a’ 不使用索引。
2.2.2 UNION操作符
UNION在表鏈接后會自動篩選掉重復的記錄,所以會對產生的結果集進行排序運算,刪除重復的記錄再返回結果。在實際過程中,很多應用程序中是不會產生重復的記錄。推薦采用UNION ALL操作符替代UNION,因為UNION ALL操作只是簡單的將兩個結果合并后就返回。
通過上述這些例子可以看出,SQL優化的本質就是在結果正確的前提下,用優化器可以識別的SQL語句,利用索引,盡可能避免表搜索的發生。我院SQL的性能優化是一個復雜漫長的過程,上述這些案例只是在SQL語句應用于我院系統時的一些具體實例總結。總之,數據庫性能優化是一個龐大的系統工程,觸及的方面很多。對于數據庫管理員而言,需要使用多種方法綜合考慮,認真分析數據庫運行過程中出現的各種問題,才可以保證數據庫高效運行。
[1]阿孜古麗.醫院數據庫安全維護的分析及策略[J].中國醫療設備,2011,(6):77-78
[2]張駿.SQLServer數據庫在醫院信息管理系統中的應用[J].計算機光盤軟件與應用2013(1)
[3]駱正云.醫院HIS系統SQLServer數據庫性能優化[J].醫療衛生裝備.2005(2):32-33