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