91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

醫院SQL數據庫系統語句優化

電子工程師 ? 來源:網絡整理 ? 2018-02-17 20:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文就如何優化大型數據庫的性能進行了一些探索,提出了優化數據庫訪問性能的若干策略,特別是對SQL語句進行了有效的分析設計的問題,以使其加快執行速度,減少網絡傳輸,能更高效地工作,充分發揮系統的效率。

隨著醫院信息系統模塊的不斷增加,特別是近兩年電子病歷的使用,臨床診療信息大量寫入數據庫,數據量急劇增加,造成業務數據庫非常龐大,業務處理的速度明顯下降。基于這一問題,本文就如何優化大型數據庫的性能進行了一些探索,提出了優化數據庫訪問性能的若干策略,特別是對SQL語句進行了有效的分析設計的問題,以使其加快執行速度,減少網絡傳輸,能更高效地工作,充分發揮系統的效率。

醫院經過多年的信息化建設,取得了顯著成效,信息化由原來的以收費、記帳為主,逐步向臨床醫療、服務病人過渡。隨著醫院信息系統模塊的不斷增加,特別是近兩年電子病歷的使用,臨床診療信息大量寫入數據庫,數據量急劇增加,造成業務數據庫非常龐大,業務處理的速度明顯下降。加之在頻繁的業務數據庫中還要進行大數據量查詢或報表統計,導致在業務處理時經常出現阻塞或死鎖現象,嚴重影響到日常的工作。故如何對數據庫性能在進行優化設計,即提高數據庫的吞吐量、減少用戶等待時間具有重大意義。

傳統的數據庫性能優化主要從操作系統、客戶端應用軟件程序設計、網絡及其它硬件設備等方面來考慮,這種方法只是調整數據庫的周邊環境,只能暫時緩解問題,而不能從根本上解決問題。實際應用中,更多情況是醫院信息系統(包括數據庫系統)都已設計好,只是在運行的過程中隨著數據規模的增大,使得系統出現周期性性能問題。本文提出的醫院數據庫系統性能優化是在己有的硬件設施升級、數據庫的物理設計、關系規范化等方面進行改進基礎之上,對SQL語句進行了有效的分析設計的問題,以使其加快執行速度,減少網絡傳輸,能更高效地工作,充分發揮系統的效率。

1 合理使用索引

提高數據庫查詢速度最有效的方法就是優化索引。索引是建立在實體表上的一種數據組織,它可以提高訪問表中一條或多條記錄的查詢效率,使用索引的目的是為了避免全表掃描,減少磁盤I/O的次數,加快查詢速度,在大型的表中進行索引的建立對加快表的查詢有著重要的意義。但是也并不對任何的數據表都要建立索引,索引通常能提高select、update以及delete語句的性能(當訪問的行較少時),但會降低insert語句的性能(因為需要同時對表和索引進行插入)。此外,過多的索引會產生維護上的開銷,只會降低而不是增加系統的性能,索引的使用要恰到好處。索引使用原則如下:

(1)在經常進行連接,但是沒有指定為外鍵的列上建立索引,而不經常連接的字段則由優化器自動生成索引。

(2)在頻繁進行排序或分組(即進行group by或order by操作)的列上建立索引,而頻繁進行刪除、插入操作的表不要建立過多的索引。

(3)在條件表達式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個不同值,因此就沒有必要建立索引,如果在此建立索引不但不會提高查詢效率,反而會嚴重降低更新速度。

(4)如果待排序的列有多個,可以在這些列上建立復合索引(compound index)。盡量使用較窄的索引, 這樣數據頁每頁上能因存放較多的索引行而減少操作。

(5)在查詢中經常作為條件表達式并且不同值較多的列上建立索引,而不同值較少的列上不要建立索引。

(6)當數據庫表更新大數據后, 刪除并重新建立索引來提高查詢速度。

總之,建立索引一定要慎重,對每個索引建立的必要性都要仔細分析,一定要有建立的依據。過多的索引或不充分、不正確的索引對提升數據庫的性能毫無益處。

2 SQL語句優化

SQL語言是一種非常靈活的語言,相同功能的實現常可以用幾種不同的語句來表達,但語句的執行效率可能存在很的差別。因此,任何一個數據庫應用系統中,合理的對SQL語句進行優化將大大的提高整個數據庫系統的性能。所有的SQL語句執行過程分三個階段,分別是進行處理語法分析、執行、讀取數據。

圖1 SQL語句執行過程

在使用SQL時,性能差異在大型的或是復雜的數據庫環境中,如在HIS的一些大型表中表現尤為明顯。經過一段時間的總結,發現SQL語句比較低下的原因主要來自于不恰當的索引設計、不充分的連接條件和不可優化的WHERE子句及其它不恰當的語句操作等,在對它們進行適當的優化后,其運行速度有了明顯提高。下面將從這幾個方面分別進行說明:

2.1 LIKE操作符

LIKE操作符可以應用通配符查詢,里面的通配符組合可能達到幾乎是任意的查詢,但是如果用得不好則會產生性能上的問題,如like 'a%' 使用索引,like ‘%a’ 不使用索引。用 like ‘%a%’ 查詢時,查詢耗時和字段值總長度成正比,所以不能用CHAR類型,而是VARCHAR。

2.2 限制返回行

在查詢Select語句中用Where字句限制返回的行數,避免表掃描,如果返回不必要的數據,浪費了服務器的I/O資源,加重了網絡的負擔降低性能。如果表很大,在表掃描的期間將表鎖住,禁止其他的聯接訪問表,后果嚴重。可以使用TOP語句來限制返回結果。當返回多行數據時,盡可能不使用光標,因為它占用大量的資源,應該使用datastore。

2.3 UNION操作符

UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。實際大部分應用中是不會產生重復的記錄,最常見的是過程表與歷史表UNION。推薦采用UNION ALL操作符替代UNION,因為UNION ALL操作只是簡單的將兩個結果合并后就返回。

2.4 Between與IN

Between在某些時候比IN速度更快,Between能夠更快地根據索引找到范圍。如:

select * from YF_KCMX where YPXH in (12,13)

Select * from YF_KCMX where between 12 and 13

一般在GROUP BY 個HAVING字句之前就能剔除多余的行,所以盡量不要用它們來做剔除行的工作。他們的執行順序應該如下最優:select 的Where字句選擇所有合適的行,Group By用來分組個統計行,Having字句用來剔除多余的分組。這樣Group By 個Having的開銷小,查詢快。對于大的數據行進行分組和Having十分消耗資源。如果Group BY的目的不包括計算,只是分組,那么用Distinct更快。

2.5 注意細節

一般不要用如下的字句: “<>”, “!=”, “!>”, “!<”, “NOT”, “NOT EXISTS”, “NOT IN”, “NOT LIKE”, and “LIKE ‘%500’”,因為他們不走索引全是表掃描。NOT IN會多次掃描表,使用EXISTS、NOT EXISTS ,IN , LEFT OUTER JOIN 來替代,特別是左連接,而Exists比IN更快,最慢的是NOT操作.如果列的值含有空,以前它的索引不起作用, “<>”, “!=”, “!>”,等還是不能優化,用不到索引。

不要在WHere字句中的列名加函數,如Convert,substring等,如果必須用函數的時候,創建計算列再創建索引來替代。還可以變通寫法:

WHERE SUBSTRING(firstname,1,1) = ‘m’

改為:WHERE firstname like ‘m%’(索引掃描),但MIN() 和 MAX()能使用到合適的索引。

select * form ZY_FYMX where FYDJ > 3000

分析在此語句中若FYDJ是Float類型的,則優化器對其進行優化為Convert(float,3000),因為3000是個整數,我們應在編程時使用3000.0而不要等運行時讓DBMS進行轉化。同樣字符和整型數據的轉換。應改為:

select * form ZY_FYMX where FYDJ > 3000.00

2.6 避免相關子查詢

一個列的標簽同時在主查詢和where子句中的查詢中出現,那么很可能當主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越多,效率越低,因此應當盡量避免子查詢。如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3939

    瀏覽量

    66529
  • 索引
    +關注

    關注

    0

    文章

    59

    瀏覽量

    10672
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    數據庫SQL優化

    用戶成功連接數據庫之后,用戶和數據庫成功建立起了會話。此后,用戶每通過會話發出一條SQL語句數據庫系統都會對其進行一系列檢查、分析、處理
    的頭像 發表于 10-09 15:43 ?1394次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>SQL</b>的<b class='flag-5'>優化</b>

    Database數據庫SQL語句

    如何用一條SQL語句清空數據庫中多張表中的記錄?請大神幫忙,謝謝
    發表于 03-01 00:57

    請教如何用SQL語句來壓縮ACCESS數據庫

    通過對ACCESS數據庫的“修復與壓縮”會使程序的運行更加穩定和提高運行速度。——請教如何用SQL語句來壓縮ACCESS數據庫,只用SQL
    發表于 11-29 21:54

    請問labview如何通過語句連接sql sever數據庫

    本帖最后由 哇哈哈哈6 于 2019-4-25 08:51 編輯 labview連接sql數據庫,通過語句,而不是通過“管理工具-ODBC”配置連接,試了好多語句都不對,不知道如
    發表于 04-24 18:48

    MySQL數據庫Access存儲讀取SQL語句

    LabVIEW視頻教程MySQL數據庫Access存儲讀取SQL語句
    發表于 10-21 11:59

    DCS組態軟件實時數據庫系統的設計

    實時數據庫系統是DCS組態軟件體系結構的關鍵部分。通過分析實時數據庫的特點和DCS系統的使用要求,提出了采取傳統數據庫系統、文件系統和內存
    發表于 03-14 14:15 ?29次下載

    數據庫系統模擬負載的探討和實現

    本文論述了事先構造數據庫系統模擬負載對數據庫設計和性能優化的重要性, 并以醫院為例,根據數據庫記錄表可能出現的
    發表于 08-31 08:49 ?15次下載

    數據庫SQL語句電子教程

    電子發燒友為您提供了數據庫SQL語句電子教程,幫助您了解數據庫 SQL語句 ,學習讀懂
    發表于 07-14 17:09 ?0次下載

    數據庫系統概論之如何進行數據庫編程的資料概述

    本文檔的主要內容詳細介紹的是數據庫系統概論之如何進行數據庫編程的資料概述主要內容包括了:1、嵌入式SQL 2、存儲過程3、ODBC編程
    發表于 11-15 15:12 ?13次下載
    <b class='flag-5'>數據庫系統</b>概論之如何進行<b class='flag-5'>數據庫</b>編程的資料概述

    數據庫系統概論之如何進行關系查詢處理和查詢優化

    本文檔的主要內容詳細介紹的是數據庫系統概論之如何進行關系查詢處理和查詢優化主要內容包括了:1、關系數據庫系統的查詢處理 2、關系數據庫系統的查詢優化
    發表于 11-15 15:12 ?11次下載
    <b class='flag-5'>數據庫系統</b>概論之如何進行關系查詢處理和查詢<b class='flag-5'>優化</b>

    數據庫系統的特點

    數據庫系統的特點 (1)數據結構化 數據庫系統實現整體數據的的結構化,這是數據庫的主要特征之一,也是數據
    的頭像 發表于 02-22 16:36 ?6658次閱讀

    使用SQL語句創建數據庫的實例詳細說明

      本文檔的主要內容詳細介紹的是使用SQL語句創建數據庫的實例詳細說明。
    發表于 11-07 14:35 ?19次下載

    使用SQL語句創建數據庫

    使用SQL語句創建數據庫 在今天的信息社會中,數據庫是信息化建設的關鍵要素之一,已經成為企業和組織的重要管理工具。創建數據庫
    的頭像 發表于 08-28 17:09 ?4603次閱讀

    mysql數據庫的增刪改查sql語句

    MySQL是一種常用的關系型數據庫管理系統,是許多網站和應用程序的首選數據庫。在MySQL中,我們可以使用SQL(結構化查詢語言)進行數據
    的頭像 發表于 11-16 15:41 ?1758次閱讀

    恒訊科技分析:sql數據庫怎么用?

    SQL數據庫的使用通常包括以下幾個基本步驟: 1、選擇數據庫系統: 選擇適合您需求的SQL數據庫系統,如MySQL、PostgreSQL、M
    的頭像 發表于 07-15 14:40 ?666次閱讀
    主站蜘蛛池模板: 大又大粗又爽又黄少妇毛片 | 鲁老汉精品视频在线观看 | 日本一区免费看 | a一级| 国产黄视频在线观看 | 久久综合九色综合97婷婷群聊 | 你懂的欧美 | 日日拍夜夜嗷嗷叫狠狠 | 三级黄色网| 免费视频不卡一区二区三区 | 国产精品免费看久久久久 | 亚洲精品美女久久久久网站 | 狠狠躁夜夜躁人人爽天天3 狠狠躁夜夜躁人人爽天天段 | 国产成人三级 | 99视频精品全国免费 | 欧美成人免费高清网站 | 欧美18videosex性欧美1819 | 四虎永久免费在线 | 亚洲网站视频 | 好色成人网 | 亚欧美视频 | 草色在线| xxx日本69hd | 亚洲一区二区高清 | 曰本性l交片视频视频 | 天天干人人 | 国产日本久久久久久久久婷婷 | 亚洲精品播放 | 国产精品露脸脏话对白 | 天天撸视频 | 最新天堂| 国产乱人视频在线看 | 入逼视频 | 日本色图在线 | 成在线人永久免费播放视频 | 不卡免费在线视频 | 伊人久久大香线蕉综合影 | 免费观看a毛片一区二区不卡 | 人人澡人人射 | 亚洲一区二区高清 | 在线成人免费 |