1. 程式人生 > >Q:一個數據表中有大量資料,如何提高查詢速度?

Q:一個數據表中有大量資料,如何提高查詢速度?

一個數據表中有大量資料,如何提高查詢速度?

一、對SQL語句進行優化,主要目的在與讓資料庫引擎使用索引而不是全表掃描進行搜尋

  • 使用索引查詢:應避免造成全表查詢的(索引失效的情況):避免null值查詢。索引列的資料不要大量重複。where語句中or(union替代)、in not in(between and)、like、!=和<>符號的使用。where子查詢中使用引數引入( select id from t where [email protected] 可以改為強制查詢使用索引: select id from t with(index(索引名)) where
    [email protected]
    )、 where 子句中對欄位進行表示式操作(select * from user where id/2 =100 強制改為select * from user where id =100*2)、where字句中對欄位進行函式操作的、在where字句等號左面使用函式、算數運算及其他運算。
  • 索引勿濫用: 在where及order by涉及的列上建索引。索引並不是越多越好(最好不要超過6個)
  • 資料量的優化:儘量使用數字型欄位(字元增加儲存開銷)、儘可能的使用vachar/nvarchar代替char/nchar(節省儲存空間),避免臨時表過多的建立和刪除,儘量使用表變數來代替臨時表、儘量避免大資料量的返回、遊標操作資料超過1萬行不好等。
  • java方面:儘量少早物件、大資料和小資料的操作分開、使用jdbc操作資料庫、控制好記憶體,讓資料流動,而不是全部在記憶體、做好快取。
  • 分割槽表的建立
  • 二、資料庫的優化

  • 硬體調整效能:最有可能影響效能的是磁碟和網路吞吐量,解決辦法擴大虛擬記憶體,並保證有足夠可以擴充的空間;把資料庫伺服器上的不必要服務關閉掉;把資料庫伺服器和主域伺服器分開;把SQL資料庫伺服器的吞吐量調為最大;在具有一個以上處理器的機器上執行SQL。
  • 使用儲存過程:應用程式的實現過程中,能夠採用儲存過程實現的對資料庫的操作儘量通過儲存過程來實現,因為儲存過程是存放在資料庫伺服器上的一次性被設計、編碼、測試,並被再次使用,需要執行該任務的應用可以簡單地執行儲存過程,並且只返回結果集或者數值,這樣不僅可以使程式模組化,同時提高響應速度,減少網路流量,並且通過輸入引數接受輸入,使得在應用中完成邏輯的一致性實現。
  • 應用程式結構和演算法:建立查詢條件索引僅僅是提高速度的前提條件,響應速度的提高還依賴於對索引的使用。因為人們在使用SQL時往往會陷入一個誤區,即太關注於所得的結果是否正確,特別是對資料量不是特別大的資料庫操作時,是否建立索引和使用索引的好壞對程式的響應速度並不大,因此程式設計師在書寫程式時就忽略了不同的實現方法之間可能存在的效能差異,這種效能差異在資料量特別大時或者大型的或是複雜的資料庫環境中(如聯機事務處理OLTP或決策支援系統DSS)中表現得尤為明顯。在工作實踐中發現,不良的SQL往往來自於不恰當的索引設計、不充份的連線條件和不可優化的where子句。在對它們進行適當的優化後,其執行速度有了明顯地提高!