朱景芝
(商丘工學院,河南 商丘 476000)
SQL查詢性能優(yōu)化方法分析
朱景芝
(商丘工學院,河南 商丘 476000)
當前,人們在使用SQL時,經常會掉入一個理解誤區(qū),就是太在乎結果是否正確,是否完美,忽視了有多種方法可供選擇的可能,之所以出現(xiàn)這種情況,是因為存在復雜的數(shù)據庫環(huán)境。筆者通過多年的工作實踐,經過深入各二級學院調查走訪,發(fā)現(xiàn)對SQL進行優(yōu)化分析后,計算機的運行效率有了顯著提升,能收到事半功倍的效果。
索引;查詢速度;SQL優(yōu)化器
所謂SQL Server,就是Microsoft公司推出的一款關系型數(shù)據庫管理系統(tǒng)。這個系統(tǒng)使用方便,具有很強的可伸縮性,相關軟件集成程度很多,使用SQL Server,能夠輕松從運行Microsoft Windows 98的筆記本電腦,延伸、運行、推廣到Microsoft Windows 2012的大型多處理器的服務器。
通過日常的教學工作,不難發(fā)現(xiàn),Microsoft SQL Server是一個相當全面的平臺,它所采用的集成的商業(yè)智能(BI)工具,提供了重要的管理數(shù)據。有了Microsoft SQL Server數(shù)據庫引擎,不但可以提供安全可靠的存儲,還能便于企業(yè)開展合理化的管理,制定一套科學的體系,使得數(shù)據庫發(fā)生重要的作用。
但是,隨著SQL Server數(shù)據庫功能得越來越完善,SQL Server數(shù)據庫有個別功能,在各自存在的領域,有著不同的實現(xiàn)方法。由于程序的問題,存在著較大差異。為了驗證這個觀點,筆者將對此舉例論證。為了更加恰當、更加合理、更加直觀地說明問題,所有的例證中,SQL運行時間均經過測試。
為了確保測試環(huán)境的安全與準確性,在測試的時候,主機準備選用HP LH II,因為這個在高校中比較常用;主頻擬定選擇330 MHz ,因為這個是電腦的基本配置;內存擬定選擇使用128 M,這個是計算機的常規(guī)配置;測試系統(tǒng)擬定選擇使用Operserver 5.1.4,這個系統(tǒng)經過長期的摸索,性能穩(wěn)定;數(shù)據庫選用的是Sybase 11.1.3,這個具有相當?shù)臋嗤裕茯炞C結果的說服力。
2.1 避免不恰當?shù)乃饕O計
在日常的工作中,總會遇到一些不恰當?shù)乃饕O計。比如說,如果一個表格record有620 000行,如果檢索方法不同,就會出現(xiàn)不同的檢索效果。專業(yè)的人,可以通過知識,進行合理規(guī)避,但是如果是學生操作,就會引發(fā)不必要的麻煩。
最常見的情況,就是在date上設置非個群集索引。在檢索的時候,會發(fā)現(xiàn)select count(*)from record where date所耗費的時間大于23 s,而select date,sum(amount)from record group by date的檢索時間則不到40 s。
通過測試,可以得出以下結論,如果表格date上存在很多重復值,在非群集索引的情況下,可以參考相關數(shù)據,當搜索到隨機的數(shù)據頁上時,就會增加不必要的時間。當人們還照本宣科地在這個范圍查尋時,就不得不執(zhí)行一次表掃描,只有這樣,才可以找到搜索到有價值的材料。
當然,如果再在date上開展一個群集索引,也會出現(xiàn)增加時間的情況。通常情況下,select count(*)from record where date的時間,遠遠要比 '19991201' and date的時間要長,這個時間,通常情況下是15 s,當然,這個時間要比'19991215' and amount >少點。
還有,完成select date,sum(amount)from group by date所需要的時間是30 s左右,這個時間,要超過select count (*)from record where date ,更比 '19990911' and place in ('BJ','SH')耗費的時間多,雖然'19990911' and place in ('BJ','SH')只需要15 s。
通過測試分,不難發(fā)現(xiàn),當在群集索引下搜索時,相關數(shù)據就會按照順序有規(guī)則的排列出來,會在程序上有規(guī)律地顯示出來,與之相對應的重復值也會自動生成排列。當在搜索時,可以考慮從起末點著手,當在這個范圍內掃描相關的數(shù)據時,就可以巧妙地避免大范圍掃描帶來的繁瑣程序,節(jié)省時間,簡化程序,提升效果。
2.2 可以嘗試組合索引
所采用的測試方法一樣,可以得出測試數(shù)據分析:只要組合索引合理,就可以在第1和第3個SQL中形成索引范圍覆蓋,讓其性能達到最大程度的發(fā)揮。
(4)通過以上測試,可以得出3點結論。第一,如果經常有范圍查詢,可以看出有明顯的重復值;第二,如果很多存取多列,可以考慮建設一套組合索引,提高效率;第三,在組合索引的時候,一定要盡可能地形成覆蓋索引,選擇使用頻繁的列,以提高索引效率。
驗證方法同上,通過對比兩個SQL的執(zhí)行狀況:可以得出結論,只有在充分的鏈接條件下,真正的最佳方案才會被貫徹執(zhí)行,而且是主動落實最優(yōu)方案。
3.1 where子句不能優(yōu)化
在搜索的時候,通常會遇到where子句不能優(yōu)化的情況。舉個例子來說,在搜索時,如果表stuff有100 000行,id_ no上存在非群集索引的時候,搜索一次,所需要的時間應該是12 s。
還是以上面的例子為論證,在點擊搜索的時候,語法分析器依照電腦編程,會自動將in('0','1')轉化為id_no ='0' or id_no='1'去貫徹執(zhí)行。當然,在搜索的時候,更愿意程序根據每個or子句依次去查找,等到把查找的結果相結合,就能找到想要的結果,當然,耗費的時間也不會太多。
可是,在實際的操作中,如果程序首選采用的是"OR策略",當它取出滿足每個or子句的標注的行,然后存入臨時搜索數(shù)據庫的工作表,就會建立唯一的搜索引擎。這個時候,只要除去重復行,同樣可以得出相應的搜索結果,而且花費的時間更少,一般情況下,不會超過10 s。
通過以上的搜索,可以找到一些規(guī)律。在搜索的時候,如果表的行數(shù)很多,其所對應的性能就會顯得比較差。在搜索的時候,可能320 000行的stuff要花費2 min的時間。從節(jié)約時間的角度考慮,不妨將子句分開,分別算出相應的結果,然后相加。拆開的結果,只有一個,那就是節(jié)省了很多時間,避免了很多無用功。
通過直接算出的結果,不難發(fā)現(xiàn),這個程序的執(zhí)行時間和上面的句子分開的時間及效果一樣快、一樣好。
由此可以得出結論:第一,無論對任何列的操作,都將引發(fā)對表的掃描。當中包含計算表達式、數(shù)據庫函數(shù)等等內容,當進行查詢的時候,一定要盡量將其挪到等號的右邊。
3.2 in,or的子句常造成索引失效的情況
在日常的管理工作中,在不產生大量重復值的情況下,可以考慮把子句拆開。當然,有一點需要謹記,所拆開的子句中,一定要包括索引;第三,在日常的管理工作中,要靈活運用存儲過程,簡化復雜的程序,讓SQL提升總的效率,更加靈動、自由、快捷、高效。
筆者撰寫此文,主要目的是通過調查研究,探析數(shù)據庫SQL查詢處理,還有對查詢處理優(yōu)化方法的探究。從文章中,通過舉例論證,不難發(fā)現(xiàn),對于SQL查詢分析,應當從不恰當?shù)乃饕O計分析、不充裕的連接條件分析、不能優(yōu)化的where子句分析這3個方面進行論證和總結。當然,科技創(chuàng)新是無限的,在日常的工作中,只需利用以上幾種方法,就能方便快捷地提高SQL的運行效率,進而提高SQL查詢的優(yōu)化性能,緩解數(shù)據庫服務器的壓力。
[1]張曉云.SQL Server 2000應用實訓教材[M].北京:科學出版社,2004.
[2]陸昌輝,吳曉華.SQLServer2000核心技術揭秘[M].北京:宇航出版社,2005.
[3]SQL Server 2000 數(shù)據庫應用技術[M].北京:中國鐵道出版社,2004.
Analysis of optimization method of SQL query performance
Zhu Jingzhi
(Shangqiu Institute of Technology, Shangqiu 476000, China)
At present, people often tend to fall into a misunderstanding trap when using SQL, that is they focus too much on whether the result is correct or perfect, but ignoring the possibility of a variety of methods to choose from. It is there exists complex database environment that causes the case. Through years working practical experiences, and in-depth investigation of the two levels colleges, the author found that after optimization analysis of SQL, the operating efficiency of computer has improved greatly, which can get twice the result with half the effort.
indexes; query speed; SQL optimizer
朱景芝(1979— ),女,河南商丘,本科,教師;研究方向:計算機科學與技術研究。