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