王永剛 王秀霞
摘 要:數據庫最大的特點是查詢的便捷性,幾乎所有的數據庫操作都是在查詢的基礎上進行的。查詢優化提高了數據庫的查詢速度,也給數據的維護帶來了方便。本文對 數據庫查詢與統計進行分析。
關鍵詞:數據庫;查詢;統計
引言
數據庫性能問題一直是決策者及技術人員共同關注的焦點,影響數據庫性能的一個重要因素就是SQL查詢語句的效率。SQL 是結構化查詢語言(Structured Query Language)的縮寫,SQL語言的功能包括數據查詢、數據操縱、數據定義和數據控制等部分,主要應用于關系數據庫,實現了關系數據庫中的數據檢索。
一、數據庫查詢優化技術概述
1.1 自動查詢優化技術
SQL server的自動查詢優化技術由基于開銷的查詢優化器來進行的,當提交一個SQL語句時,這個語句只是表明想要從數據庫中得到什么樣的結果,對于怎么樣得到結果,SQL語句不會涉及。給予開銷的查詢優化器以CPU的使用率和磁盤I/O作為判斷依據來為每個可能的執行規劃賦予開銷值,然后優化器會選擇開銷值最小的執行規劃來執行。
1.2 索引技術
在SQL server數據庫中,索引是一個物理性的數據庫結果,是單獨存在的,在檢索數據的時候,對磁盤的讀寫都需要占用很大的開銷,如果缺少了索引,就必須要對磁盤進行識別。有了索引的幫助,查詢數據只需要索引頁面就行,索引能夠很大程度上提高查詢檢索速度。因此,要擁有查詢方便快捷的數據庫,索引是必不可少的。
1.3影響查詢效率的因素
SQL server數據庫系統在處理查詢計劃時,首先要系統對詞法和語法進行檢查,檢查完之后將其遞交給SQL server的查詢優化器,優化器會對數據是否存在和有效進行索引,再進行掃描、檢索和連接,這個計劃的執行是在同一時間進行的,通過分析來對計劃的執行進行評價,通過開銷最小的計劃來實現,然后預編譯模塊會對語句進行處理,最后生成了查詢規劃,查詢規劃會在恰當的時間提交給系統,系統會將執行結果反饋給客戶。在SQL server數據庫中影響查詢效率的因素主要有五點:第一,當沒有索引或者索引無法使用的時候。因為索引能夠繞開全表掃描,能夠有效提高查詢速度。第二,在進行查詢工作的時候,缺少計算列的時候是無法進行優化查詢的。第三,查詢出來的數據量很大的時候也會影響查詢效率。第四,返回了不必要的行和列。第五,如果查詢的時候語句選擇不合理,就無法進行優化。語句選擇不合理的情況主要有查詢條件中的操作不合適,多個選擇條件進行查詢時,條件的次序不是最優。
二、數據庫的查詢與統計優化方法
2.1 建立索引
并不是所有的數據庫都有索引,因為很多數據庫不需要使用索引,索引是否應該存在有一些爭議,究其原因,主要是數據庫系統當中添加索引之后,再對數據庫進行查詢的時候,就無法對數據庫中的所有內容進行掃描和查詢,只能在索引范圍之內進行查詢了。基于這樣一種情況,從性能角度來說,目標表記錄的總數是固定的,因此,只有當查詢結果比較少的時候,索引才會有較高的查詢效率,如果查詢結果很多,那么索引會導致查詢效率降低,這也是索引的存在有爭議的原因。在實際情況中,數據庫系統要根據應用目的和實際狀況進行合理配置,那些記錄數較多的數據庫應該要建立索引,從而有效提高查詢效率。
2.2 SQL 查詢語句的優化策略
一個數據庫系統的反應速度的快慢,最為直接的表現就是優化器的計算方法。另外,優化器的測量和查詢表中的其他內容和服務存在關聯。由此可見,讓優化器選擇恰當的索引和表達的連接手段是十分重要的。
2.3 避免全表掃描
一般情況下,數據庫在進行查詢或者select語句的處理過程中,會掃描全表,在執行的時候,如果出現數據更新和數據刪除的情況也會掃描全表。如果添加索引的話,能夠讓數據訪問的速度得到提升。而要建立科學合理的索引,那就必須要充分了解數據,然后在實踐中不斷進行優化。
2.4 合理使用索引
索引在數據庫中占有重要的地位,其對查詢速度的提高有著十分明顯的效果。但是創建和使用索引的時候,索引都必須跟系統的查詢需求一致。
2.5 選擇恰當的操作符,提高查詢效率
應該要盡可能的少用(NOT)IN,而使用(NOT)EXISTS,此外,還要盡量避免使用OR運算符,>和<可以用>=和<=來代替,同時,對于諸如IS NULL和 IS NOT NULL等操作也要盡量避免,另外,還要注意LIKE操作符的正確使用。
2.6 避免使用SELECT進行查詢
在使用SQL語句的時候,一定要特別注意書寫細節,避免使用SELECT來進行查詢,在進行篩選的時候,盡量避免使用表達式,而要用常量來代替,而且如果表中數據量很大的話,要特別注意WHERE子句中的篩選條件的順序,因為這會直接影響查詢效率。
2.7 SQL語句對索引的利用
在實際的應用中,聚集索引的效率要比非聚集索引要高,聚集索引能夠將數據在物理順序上進行排列,計算在其中存在一些重復值,但是仍然集中在一起,這就能夠將查詢范圍鎖定在一個較小范圍之內,可以有效提高掃描速度。
2.8 合理使用臨時表
針對那些數據量很大,但是數據變化不是很多的數據庫表,可以將子集排序,同時創建臨時表,這就有效防止了多重排序操作,提高了查詢速度。
2.9 建立視圖
建立視圖可以幫助人們更方便的進行數據查詢等操作,因為視圖可以讓人們重點關注他們想要了解和感興趣的數據和信息。在建立視圖的時候一定要控制視圖的規模,如果視圖的規模比基本表要小,那么,查詢速度會大大提高。
三、 SQL查詢安全監控系統
SQL數據庫系統的安全性也是人們關注的焦點,如果發現用戶進行非法操作,系統就會自行進行處理。在監控攻擊行為的時候,系統會對非法用戶發出警告,同時還會對相關信息進行記錄,在必要的情況下,還可能會阻斷網絡。在SQL系統中,有信息獲取、分析機和控制臺三個子系統,這三個系統之間會存在交互工作。
3.1 主機來實現報警
開啟探頭之后,可以獨立監控數據庫,給予數據庫中的相關信息,把信息根據一定的規則進行分析,通過分析,判斷數據庫是否存在安全隱患,并且確定是否需要發出危險警報。如果某臺的計算機在進行非法操作的時候,系統會記錄該計算機的IP地址,并且按照上述步驟進行操作,控制臺一旦收到危險警報,就會根據指令來執行阻斷指令。分析機把阻斷指令傳遞給探頭,探頭會調用SQL server數據庫系統中的API函數,從而對進行非法操作的計算機的操作行為進行攔截,保證數據庫中的數據和信息不會被泄漏、丟失和破壞。
3.2 下發命令
當控制臺發出指令之后,指令會傳遞給分析機和信息獲取部分,最后會通過對模塊的響應來實現指令的操作。
3.3 傳送相關數據
探頭、分析機和控制臺三者之間的數據傳遞都是通過端口來進行的,要有效傳送數據和信息,這些信息的格式是要統一的,如果不是統一的標準格式,信息無法傳遞和接收。
四、結束語
數據庫系統是一個很龐大的系統,在應用過程中,數據庫的運行速度和運行效率是十分重要的,有些數據庫運行速度慢、運行效率低,嚴重影響了數據庫的性能。因此,在設計和開發數據庫的時候,一定要將數據庫的運行速度和效率放到重要位置。
參考文獻:
[1]朱敏英.數據庫SQL查詢語句優化研究[J].信息與電腦(理論版),2013(06):117-119.
[2]苗雯娟.MS SQL Server數據庫查詢優化技巧研究[J].企業導報,2012(16):274.