文/吳加華
由于SQL Servers數據庫管理系統具有較高的數據管理性能,因其優越的性能,應用范圍非常廣,大量應用于服務器和客戶體系結構中。SQL Servers數據庫的性質主要體現在以下幾個方面:系統的吞吐量、響應時間以及并行處理能力,發出請求服務器回應的速度、還有不同屏幕之間切換的速度等等。本文主要討論SQL Servers數據庫性能優化的方法。
很多個SQL語句組合成為一個邏輯的單元,數據庫服務器執行著事務的處理和控制,數據庫事務的起點和終點是由應用程序劃分的,操作人員使用數據庫時,盡量要縮短數據庫事務單元的長度,事務短了,通過其他的SQL語句占用獲得的回滾空間和鎖就可以充分釋放,進而減少了SQL Server數據庫與其他運行的程序爭奪資源情況發生。
當操作人員使用數據庫查詢大量的數據,這時查詢動作會給服務器造成負擔,所以,當操作人員需要查詢大量數據時,如果表的數據量過大,就需要制定一個條件,這樣可以有效避免返回的信息量太多。返回信息量過多會導致DMNS的性能受阻。系統返回信息也會增加網絡通信量,就會發生網絡擁擠,如果客戶機的內存不足,返回信息量就會加載過重,會出現很嚴重的問題。
應用程序如果要對代碼這類的數據進行處理時,如果需要反復使用這類的數據,那就可以通過使用到客戶機的緩存,將數據庫上一次性的將數據檢索下載到客戶緩沖機,然后使用數據共享的技術來實現反復對數據的使用。或者可以將原數據使用的數據提前存儲好,直接調用即可,這樣就可以不通過檢索服務器,可以使性能得到優化。
網絡是服務器和客戶端運行的基礎,網絡的帶寬的大小對數據庫系統性能的優化也有著顯著地影響,可以使用存儲的過程,以此來減少對數據庫的大量查詢,可以降低網絡流量過大導致的網絡問題,比如,阻塞和擁堵。這樣SQL Server的吞吐量得到了增強,反應時間也得到相應的加快。這時,客戶僅需要對參數進行控制,就可以調用存儲過程,從而不需要對SQL Server數據庫發送大量的語句。另一方面,可以利用服務器方式來對數據進行處理,這樣可以有效的梳理下載原始數據再進行處理的復雜程度,通過減小結果的結合,以此來實現網絡負載的優化。
對SQL語句的優化,本質是以正確的結果為前提,對索引的使用效率做到最高,采用服務器可以使用到的語句進行索引,可以有效的降低對服務器的全表掃描,而且還可以有效的規避返回沒有限定條件的信息。
以下面的兩條SQL語句為例進行解釋:
語句一:select 倉庫號,貨物名 from T1 where 貨物名 not in (select 姓名 fromT4);
語句二:select 倉庫號,貨物名 from T1 where not exists (select 班級 FROM T2 where T4 .姓名 =T3 姓名);
上述兩條SQL語句實現的功能完全一樣,但是因為語句一沒有在姓名后建立姓名的索引,因此數據庫執行操作時,會掃描T4表的部分數據,使得數據二比數據一檢索的效率高了很多倍,通過對大量類似的語句產生優化,可以使得SQL數據庫系統性能得到提升。還有,在具體的應用中要減少條件列,例如,“where 銷售額=‘60’”還有“where 銷售額 /100>0.7”這兩個條件列。數據庫如果處理這樣的條件列會顯得非常慢,因為“where”是對所有條件進行操作,需要掃描全表。此時如果使用“where 銷售額 like ‘120’,則SQL語句執行效率就會快很多。減少使用in、not in等等語句,使用exists、not exists語句效果要遠好于in、not in等語句。
操作人員如果要查詢視圖相關的信息,可以對其進行分解,可以對數據表進行直接的查詢,而進行數據查詢時,操作人員優先查詢的是主表,然而主表需要對整個表進行掃描,因此需要將整個主表內容進行控制,越小越好,主表查詢的范圍相對比表的范圍要小很多。主表和從表之間的聯合需要結合數據量的大小,還有檢索的條件來考慮。