幾千萬條數據,怎麼讓查詢效率高起來?

大數據量的優化,自己總結了下,在自己的認知範圍內,整理了兩個大方面:
一、sql語句方面的優化
       1、使用索引查詢
             造成全表查詢的(索引失效的情況):避免null值查詢。索引列的數據不要大量重複。where語句中or(union替代)、in not in(between and)、like、!=和<>符號的使用。where子查詢中使用參數引入(  select id from t where num=@num 可以改爲強制查詢使用索引: select id from t with(index(索引名)) where num=@num )、 where 子句中對字段進行表達式操作(select * from user where id/2 =100 強制改爲select * from user where id =100*2)、where字句中對字段進行函數操作的、在where字句等號左面使用函數、算數運算及其他運算。 
           索引勿濫用: 在where及order by涉及的列上建索引。索引並不是越多越好(最好不要超過6個)。
       2、數據量的優化:儘量使用數字型字段(字符增加存儲開銷)、儘可能的使用vachar/nvarchar代替char/nchar(節省存儲空間),避免臨時表過多的創建和刪除,儘量使用表變量來代替臨時表、儘量避免大數據量的返回、遊標操作數據超過1萬行不好等。
        3、java方面:儘量少早對象、大數據和小數據的操作分開、使用jdbc操作數據庫、控制好內存,讓數據流動,而不是全部在內存、做好緩存。
        4、分區表的創建。


二、數據庫的優化
        1、硬件調整性能 最有可能影響性能的是磁盤和網絡吞吐量,解決辦法擴大虛擬內存,並保證有足夠可以擴充的空間;把數據庫服務器上的不必要服務關閉掉;把數據庫服務器和主域服務器分開;把SQL數據庫服務器的吞吐量調爲最大;在具有一個以上處理器的機器上運行SQL。


三、使用存儲過程

應用程序的實現過程中,能夠採用存儲過程實現的對數據庫的操作儘量通過存儲過程來實現,因爲存儲過程是存放在數據庫服務器上的一次性被設計、編碼、測試,並被再次使用,需要執行該任務的應用可以簡單地執行存儲過程,並且只返回結果集或者數值,這樣不僅可以使程序模塊化,同時提高響應速度,減少網絡流量,並且通過輸入參數接受輸入,使得在應用中完成邏輯的一致性實現。

四、應用程序結構和算法

建立查詢條件索引僅僅是提高速度的前提條件,響應速度的提高還依賴於對索引的使用。因爲人們在使用SQL時往往會陷入一個誤區,即太關注於所得的結果是否正確,特別是對數據量不是特別大的數據庫操作時,是否建立索引和使用索引的好壞對程序的響應速度並不大,因此程序員在書寫程序時就忽略了不同的實現方法之間可能存在的性能差異,這種性能差異在數據量特別大時或者大型的或是複雜的數據庫環境中(如聯機事務處理OLTP或決策支持系統DSS)中表現得尤爲明顯。在工作實踐中發現,不良的SQL往往來自於不恰當的索引設計、不充份的連接條件和不可優化的where子句。在對它們進行適當的優化後,其運行速度有了明顯地提高!

發佈了63 篇原創文章 · 獲贊 79 · 訪問量 90萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章