• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      大型數(shù)據(jù)庫SQL語言的性能分析

      2013-04-29 18:55:34毛志東沈洋
      網(wǎng)友世界 2013年23期
      關鍵詞:字段語句選擇性

      毛志東 沈洋

      【摘 要】本文就大型數(shù)據(jù)庫中常用的SQL語言進行性能上的分析,并從數(shù)據(jù)結構上給出其關鍵數(shù)據(jù)結構和關鍵算法上效率上的分析,從INSERT,DELETE,SELECT,UPDATE結合索引給出一般大型數(shù)據(jù)庫的優(yōu)化方法,并系統(tǒng)性的給出提高效率的具體方法。

      在當前計算機應用系統(tǒng)中,大型數(shù)據(jù)庫是信息系統(tǒng)的關鍵環(huán)節(jié),是存儲數(shù)據(jù)的必要手段,互聯(lián)網(wǎng)上大多數(shù)應用數(shù)據(jù)存儲在大型數(shù)據(jù)庫中,因此,合理的掌握大型數(shù)據(jù)庫的編程,是信息系統(tǒng)編程至關重要的環(huán)節(jié)。但是大型數(shù)據(jù)庫的SQL語言使用,和一般的編程環(huán)節(jié)有較大的不同,這使得初級編程人員很難在短期內精通,并且難以編制高質量的代碼[1]。

      SQL語言編程與一般的語言編程有很大不同,SQL語言是過程式語言,強調對數(shù)據(jù)的操作,但是操作的方式與一般的數(shù)據(jù)操作相比又有很大不同,SQL語言是以數(shù)據(jù)庫中的數(shù)據(jù)塊為數(shù)據(jù)操作單位,因此,對于數(shù)據(jù)庫來說,成批處理數(shù)據(jù),比單獨一條條處理數(shù)據(jù)有更高的效率,這就決定了SQL語言最好是以數(shù)據(jù)塊的方式進行編程,而非逐條記錄的方式處理數(shù)據(jù)的方式處理數(shù)據(jù)。此外,SQL語言是對數(shù)據(jù)塊進行操作,需要大量的磁盤I/O操作,因此效率是SQL需要注意的關鍵問題,設計不佳的SQL語言,使得效率極為低下,不能滿足信息系統(tǒng)的需要。

      以下我們逐一分析SQL最常用的四種操作數(shù)據(jù)的方法SELECT,UPDATE,DELETE,INSERT的性能。

      1.SELECT語句的效率受索引影響,索引對SELECT語句的效率起到了至關緊要重要的作用,在沒有索引的情況下,SELECT語句使用全表掃描,也就是說,對于需要查找的記錄,在全表范圍內進行查找,因此,查詢一條記錄和查詢所有記錄的代價是相當?shù)摹T谟兴饕龝r,SELECT語句的執(zhí)行效率取決于WHERE條件與索引的配置,當WHERE條件中的搜索字段定義了索引時,SELECT語句可以利用索引進行記錄定位,從而可以快速定位到相應記錄。當SELECT語句中的條件和索引無關時,這時SELECT語句不能利用索引定位,因為仍然需要全表掃描。

      2.UPDATE語句的效率和SELECT語句的性質相似,因此,UPDATE語句在執(zhí)行大批量修改時,效率相當高,在對單條記錄進行修改時,如果WHERE條件上沒有索引,仍需要進行全表掃描,效率較低,但有索引時,會使用索引進行記錄定位,UPDATE語句和SELECT語句的差別在于,UPDATE語句對字段進行修改,如果修改的字段上定義了索引時,UPDATE語句需要同時修改索引。

      3.DELETE語句的效率和UPDATE語句極為相似,因此這二類語句同時可能涉及對索引的修改,執(zhí)行的效率同樣取決于WHERE條件上是否有相應的索引結構。

      4.INSERT語句的效率在所有方法中是最高的,INSERT語句的插入方法取決于表的性質,當表是堆表時,INSERT語句總是將新記錄插到最后面,因此不需要考慮其它代價,當數(shù)據(jù)表上定義了聚簇索引時,由于表中的記錄會按聚簇索引的次序進行排列,因此插入時,會插入到表中的特定位置,當特定位置沒有空間時,會將數(shù)據(jù)塊分裂,從而保證記錄在數(shù)據(jù)塊上的有序性。

      考慮到索引在大型數(shù)據(jù)庫中的重要性,我們對索引進行分析,一般來說,索引可分為聚簇索引和非聚簇索引,聚簇索引的特點在于數(shù)據(jù)按索引的在數(shù)據(jù)塊中物理順序排放,非聚簇索引則沒有此要求。一般來說,索引的結構是B+樹,B+樹由于其高效的動態(tài)查找性能,在數(shù)據(jù)庫中應用廣泛。

      B+樹的特點在于矮而粗,B+樹由于矮小,因為查找的層次少,所以能實現(xiàn)極高的動態(tài)查找效率,但是B+樹同樣需要大量的存貯空間,此外B樹只對選擇性高的字段有效,選擇性差的字段無效。

      所謂索引字段的選擇性,是指能否根據(jù)選定的值,快速定位到相應的字段,而選擇性高的字段可以優(yōu)先作為索引,選擇性差的字段,不宜作為索引,例如,對于班級表而言,學號是選擇性高的字段,可以根據(jù)特定的值找到相應的記錄,但對于選擇性差的字段,例如性別,當使用B+數(shù)對性別建立索引時,最多只能將記錄分為二個分支“男”“女”,因此無法利用B樹精確定位記錄,因此,建立B樹只能浪費空間,并不能提高效率。

      此外,如果數(shù)據(jù)庫中的索引建立不準確,SQL優(yōu)化器可能不會使用定義的索引進行查找,因此索引必須有高選擇性,而且經(jīng)常被用于查找[4]。

      SQL語句中,除了SELECT,INSERT,DELETE,UPDATE之外,關聯(lián)運算也是極為重要的操作,數(shù)據(jù)庫中的關聯(lián)運算,如果完全按語義上執(zhí)行,操作極為耗時,因此一般SQL使用優(yōu)化器對之進行優(yōu)化處理,對于關聯(lián)語句關聯(lián)的A,B表,如果B表在連接字段上定義了索引,那么,就可以先讀取沒有定義索引的A表,然后在A表的每個記錄上,用索引去查找B表,從而得到關聯(lián)結構。

      因此,索引在關聯(lián)運算中極為重要,是提高效率的有效手段,當二張表上沒有定義索引時,SQL優(yōu)化器往往會在某張表上建立臨時索引,然后利用臨時索引進行關聯(lián)查找。

      關聯(lián)運算還和內存有關,如果緩沖內存夠,那么,關聯(lián)運算可以將表放在內存中進行關聯(lián),這顯然大大增加了效率,而在內存很少時,只能逐一對表進行讀取,并進行關聯(lián),效率明顯下降。

      此外,應用程序的合理編寫,對SQL影響較大,而臨時表技術,可以大幅提高程序效率,對于需要處理的數(shù)據(jù),我們不直接在表上進行操作,而是將需要處理的數(shù)據(jù),從大表中提取出來,放在臨時表中,因為臨時表中數(shù)據(jù)量較小,因此處理很快,這樣避免了從大表中查找數(shù)據(jù)。

      對于信息系統(tǒng),在業(yè)務處理中,需要區(qū)分二類數(shù)據(jù)處理,一類是短事務處理,對于前臺進行的操作,是短事務,需要盡快處理,因為需要很高的效率,而對于數(shù)據(jù)加工如記帳來說,是長事務,需要長時間的運行,在信息系統(tǒng)中,需要處理好二類不同的事務,才可能開發(fā)出良好的數(shù)據(jù)庫應用程序。

      參考文獻:

      [1]張水平.數(shù)據(jù)庫原理及SQL Server應用[M].西安:西安交通大學出版社,2008.

      [2]Abraham Silberschatz,Henry F.Korth,S.Sudarshan數(shù)據(jù)庫系統(tǒng)概念(第3版)[M].北京:機械工業(yè)出版社,2008.

      [3]Ramez Elmasri,(美)Shamkant B.Navathe.數(shù)據(jù)庫系統(tǒng)基礎.高級篇[M].北京:人民郵電出版社,2008.

      [4]周輝君.數(shù)據(jù)庫系統(tǒng)優(yōu)化方法研究[J].科技信息,2008(17):70.

      猜你喜歡
      字段語句選擇性
      Keys
      圖書館中文圖書編目外包數(shù)據(jù)質量控制分析
      重點:語句銜接
      選擇性聽力
      精彩語句
      選擇性應用固定物治療浮膝損傷的療效分析
      選擇性執(zhí)法的成因及對策
      學習月刊(2015年14期)2015-07-09 03:37:48
      CNMARC304字段和314字段責任附注方式解析
      無正題名文獻著錄方法評述
      如何搞定語句銜接題
      語文知識(2014年4期)2014-02-28 21:59:52
      奎屯市| 甘泉县| 新乡市| 莱西市| 江阴市| 耿马| 龙里县| 高州市| 厦门市| 镇巴县| 招远市| 观塘区| 西峡县| 开阳县| 法库县| 金山区| 沙河市| 鹿泉市| 建平县| 阿勒泰市| 望奎县| 洪雅县| 四平市| 衡南县| 五台县| 合川市| 阿瓦提县| 西乌珠穆沁旗| 手机| 仁怀市| 武强县| 肇东市| 伊通| 云南省| 手游| 宁蒗| 威宁| 古浪县| 呼伦贝尔市| 洪湖市| 中西区|