昝汝濤,薛 兵,尹 強(qiáng)
?
“軍衛(wèi)一號”門診醫(yī)師站重建數(shù)據(jù)庫索引的設(shè)計(jì)與探討
昝汝濤,薛兵,尹強(qiáng)
[關(guān)鍵詞]軍衛(wèi)一號;門診醫(yī)師站;數(shù)據(jù)庫;索引
筆者所在醫(yī)院“軍字一號”門診醫(yī)師站子系統(tǒng)于2010年正式啟用,在日常醫(yī)療活動(dòng)中占據(jù)舉足輕重的作用,有效地規(guī)范了門急診業(yè)務(wù),縮短了患者的候診時(shí)間,提高了門急診工作效率。結(jié)合醫(yī)院門急診醫(yī)師反映門診醫(yī)師站系統(tǒng)在調(diào)取患者歷史處方、門診病歷及患者就診序列時(shí)反應(yīng)較慢的問題,筆者從實(shí)踐出發(fā)通過大量測試認(rèn)為,使用創(chuàng)建門診醫(yī)師站的數(shù)據(jù)庫索引可提升“軍衛(wèi)一號”門診醫(yī)師站的速率。
1.1門診醫(yī)師站存在的主要問題通過門急診醫(yī)師的反映以及筆者實(shí)際的測試發(fā)現(xiàn),困擾醫(yī)院門診醫(yī)師站速度慢的問題主要存在三個(gè)方面。第一,門急診醫(yī)師在調(diào)取患者歷史處方時(shí)效率較低,數(shù)據(jù)庫延遲較大。第二,調(diào)取患者門診病歷時(shí)數(shù)據(jù)庫延遲較大。第三,門急診醫(yī)師站在讀取門急診患者就診序列時(shí)延遲較大。
1.2創(chuàng)建索引的優(yōu)勢通過多年對“軍衛(wèi)一號”信息化了解及大量工作實(shí)踐,筆者發(fā)現(xiàn)創(chuàng)建索引可以大大提高系統(tǒng)的性能。優(yōu)勢主要有以下方面:(1)通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性;(2)可以大大加快數(shù)據(jù)的檢索速度;(3)可以加速表和表之間的鏈接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義;(4)在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間;(5)通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。那么,通過創(chuàng)建數(shù)據(jù)庫索引能不能優(yōu)化門診醫(yī)師站的性能呢?帶著這個(gè)問題筆者考慮在門診醫(yī)師(OutpDoct)用戶下面重建所有索引,看能否解決醫(yī)院門診醫(yī)師站所面臨的問題。
根據(jù)醫(yī)院的實(shí)際情況,在醫(yī)院備用HIS服務(wù)器上做測試,將在線數(shù)據(jù)庫的冷備份文件拷貝過來,作為備用數(shù)據(jù)庫。
2.1分析門診醫(yī)師站的表結(jié)構(gòu)創(chuàng)建索引的第一步首先要將門診醫(yī)師站的表結(jié)構(gòu)了解清楚。理清門診醫(yī)師站(OutpDoct)用戶下相關(guān)的表及各表之間的關(guān)聯(lián)。主要涉及原始表包括:
OutpDoct.outp_mr
OutpDoct.outp_orders
OutpDoct.outp_orders_costs
OutpDoct.outp_presc
OutpDoct.outp_treat_rec
OutpDoct.outp_orders_t
OutpDoct.outp_wait_queue
2.2導(dǎo)出門診歷史數(shù)據(jù)近年來,隨著醫(yī)院門診量的不斷增加,門診醫(yī)師站表空間也在不斷擴(kuò)增,門診醫(yī)師站相關(guān)表中的記錄也在成倍增長,數(shù)據(jù)的增加也會影響到門診醫(yī)師站使用速度。筆者將門診醫(yī)師站(OutpDoct)用戶下所涉及的原始表中指定時(shí)間段的記錄導(dǎo)出到相應(yīng)臨時(shí)表中,再將臨時(shí)表中數(shù)據(jù)做導(dǎo)出(Exp)操作,然后把指定時(shí)間段內(nèi)的數(shù)據(jù)刪除。
2.3列出詳細(xì)的升級計(jì)劃和步驟在實(shí)驗(yàn)服務(wù)器上進(jìn)行模擬操作,同時(shí)要注意數(shù)據(jù)結(jié)構(gòu)改變也是一項(xiàng)復(fù)雜的任務(wù),一定要謹(jǐn)慎認(rèn)真,通過實(shí)驗(yàn)既能及時(shí)發(fā)現(xiàn)問題,也能熟悉轉(zhuǎn)換過程。
3.1斷開數(shù)據(jù)庫服務(wù)器與用戶之間連接斷開用戶的連接,在對數(shù)據(jù)庫操作的時(shí)候要避免用戶對數(shù)據(jù)的修改,最簡單的辦法就是斷開服務(wù)器的網(wǎng)線。
3.2冷備份在線數(shù)據(jù)庫冷備份數(shù)據(jù)庫無論在實(shí)驗(yàn)服務(wù)器上升級是否順利,都需要在準(zhǔn)備升級前對在線服務(wù)器做一次全庫冷備份,一旦出現(xiàn)什么異常情況,至少可以恢復(fù)到升級前的狀態(tài),這一點(diǎn)切記。
3.3利用批處理命令文件完成升級工作為了保證升級步驟的連續(xù)性,筆者使用批處理命令的方式來完成此次操作,首先將歷史數(shù)據(jù)備份到臨時(shí)表,然后做Exp導(dǎo)出操作。
3.4導(dǎo)出相關(guān)表的列表文件導(dǎo)出相關(guān)表的列表文件,將導(dǎo)出的記錄數(shù)做相應(yīng)的備份。
outdoct_bak_exp.lst命令如下:
userid=outpdoct/outpdoct
grants=n
indexes=n
rows=y
tables=(outp_mr_bak,
outp_orders_bak,
outp_orders_costs_bak,
outp_presc_bak,
outp_treat_rec_bak,
outp_orders_t_bak)
3.5保存創(chuàng)建的臨時(shí)表將保存的臨時(shí)表作為數(shù)據(jù)恢復(fù)原始表,以保證數(shù)據(jù)恢復(fù)完整性。
outpdoct_re.sql命令如下:
connectoutpdoct/outpdoct
insert into outpdoct.outp_mr
select*
fromoutp_mr_bak;
commit;
3.6重建用戶下所有索引在門診醫(yī)師(outpdoct)用戶下面重建所有索引,以消除索引碎片,提高門診醫(yī)師站系統(tǒng)的性能。
3.7查看生成的Log日志文件導(dǎo)出歷史數(shù)據(jù)及建立索引工作完成后,查看重建日志.Log文件,未發(fā)現(xiàn)錯(cuò)誤,說明以上工作都是成功的。
上述工作完成后,立即測試門診醫(yī)師站速度,發(fā)現(xiàn)門診醫(yī)師站速率大幅提升,困擾工作的問題完全解決。索引重建過程中要與門診部做好溝通工作,及時(shí)反饋門診醫(yī)師站在索引重建后出現(xiàn)的問題,還要密切關(guān)注全院“軍衛(wèi)一號”其他系統(tǒng)的運(yùn)行情況,發(fā)現(xiàn)問題及時(shí)解決。
雖然索引有許多優(yōu)點(diǎn),但是為表中的每一個(gè)列都增加索引,是非常不明智的。因?yàn)椋海?)創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加;(2)索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大;(3)當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。
一般來說,下列情況不應(yīng)該創(chuàng)建索引:(1)對于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。這是因?yàn)椋热贿@些列很少使用到,因此有索引或者無索引,并不能提高查詢速度。相反,由于增加了索引,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。(2)對于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。這是因?yàn)?,由于這些列的取值很少增加索引,并不能明顯加快檢索速度。(3)對于那些定義為text,image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因?yàn)?,這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。(4)當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建索引。這是因?yàn)?,修改性能和檢索性能是互相矛盾的。當(dāng)增加索引時(shí),會提高檢索性能,但是會降低修改性能。當(dāng)減少索引時(shí),會提高修改性能,降低檢索性能。所以,在創(chuàng)建數(shù)據(jù)庫索引時(shí)要充分考慮上述的問題,充分發(fā)揮數(shù)據(jù)庫索引在數(shù)據(jù)庫中的作用。
參考文獻(xiàn)
[1]孫永寧.提高查詢效率的oracle索引優(yōu)化策略探析[J].電子技術(shù)與軟件工程,2013,18(2):229.
[2]馬斌,鐘方偉,余長江,等.數(shù)據(jù)庫索引對象優(yōu)化方法分析與應(yīng)用[J].電腦知識與技術(shù),2014(31):7241-7243.
[3]劉超.探討索引技術(shù)在ORACLE數(shù)據(jù)庫中的運(yùn)用問題[J].信息與電腦:理論版,2014,12(1):81-82.
[4]于彥國. Oracle數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能優(yōu)化[J].電子技術(shù)與軟件工程,2015,21(2):214-215.
[2015-10-12收稿,2015-11-10修回]
[本文編輯:王軍紅]
[中圖分類號]R197.324
[文獻(xiàn)標(biāo)志碼]B
DOI:10.14172/j.issn1671-4008.2016.05.035
[作者單位]261021山東濰坊,解放軍89醫(yī)院(昝汝濤,薛兵,尹強(qiáng))