我們都知道在涉及海量資料問題的時候,一般都需要用到資料倉儲和資料最佳化技術。那麼怎樣對資料最佳化呢?本文將簡單介紹一下如何對海量資料的最佳化。
1.索引的使用:索引可以提高檢索資料的速度,但同時也會降低寫入資料的速度。
在SQLServer中專門有一個索引表來存放我們建立的索引,一般情況下我們都將索引建立在資料類型是Int或是Char型的欄位上。
2.資料鎖的使用:行鎖,頁鎖,表鎖等。(預設是頁鎖)
切記 防止死結的發生。
3.資料庫事務,資料並發方式。
一般將主從表放在事務中來處理。
4.盡量不迴圈讀取資料,適當的時候可以增加一些暫存資料表,或在暫存資料表中增加一些臨時欄位,來避免迴圈。
5.橫向切分
把表中經常查詢的和不常用的分開成幾個表
6.縱向切分
把不同類型的分成幾個表
7.盡量不迴圈讀取資料
可以使用暫存資料表和一些臨時欄位來避免迴圈。暫存資料表可以防止資料在中途被修改,且插入暫存資料表中的資料不寫入日誌,建索引也非常快,且不插入索引實體表。可將要插入的資料先插入暫存資料表中,最後一次性匯入正式表中。
8.合理建立表的索引並利用表的索引
9.關聯的表要盡量少,資料量少的表盡量放在資料量多的表的前面
10.避免where條件後面用函數
如:sum等。
11.避免長事務(等待時間過長)
12.資料表的欄位不能太多
13.多使用試圖(View)
14.大量資料的處理盡量放在預存程序中來實現
15.OR語句的寫法盡量規範
如:select tid,tname from table where tid=5 and (tname='3' or tname='t')盡量寫成select tid,tname from table where (tid=5 and tname='3' ) or (tid=5 and tname='t')
16.盡量不要在Sql語句中嵌套Sql語句(子查詢)
17.在資料量大的情況下,為了提高檢索速度,可適當增加表的冗餘
18.用聯結和Delete語句來代替Not In,In 比Not In要快
本文純屬公司一位牛人和我個人的一些經驗之談,不具參考價值。