Asp.Net 網站最佳化系列之資料庫最佳化 分字訣 分表(縱向拆分,橫向分區)

來源:互聯網
上載者:User

1. 縱向分表
縱向分表是指將一個有20列的表根據列拆分成兩個表一個表10列一個表11列,這樣單個表的容量就會減少很多,可以提高查詢的效能,並在一定程度上減少鎖行,鎖錶帶來的效能損耗。

縱向分表的原則是什麼呢,應該怎樣拆分呢?答案是根據商務邏輯的需要來拆分,對於一張表如果業務上分兩次訪問某一張表其中一部分資料,那麼就可以根據每次訪問列的不同來做拆分; 另外還可以根據列更新的頻率來拆分,例如某些列每天要更新3次,有些列從建立開始基本上很少更新。

舉例:
假定情境,我有一張使用者表,這張表包含列:
ID, UserName, Password, RealName, Gender, Email, IsEmailValid, Birthday, Country, City, Address, Mobile, Phone, ZipCode, Hometown, OfficePhone, Company, Position, Industry, LatestLoginTime, LatestLoginIP, LoginTimes,OnlineMinutes

假定現在我們的登入出現了效能問題,使用者登入經常出現資料庫逾時的現象。我們打算用拆表的方法解決這個問題。先看下涉及到登入的欄位有:UserName,Password,LatestLoginTime,LatestLoginIP,LoginTimes;那麼我們就可以以此為依據將原表拆分為:UserLogin和UserBase 兩個表,後者包含除了登入資訊的其他列資訊;兩張表都要包含主鍵ID。

2. 橫向分區
橫向分區是將表從行的角度拆分,例如將建立時間在05年之前的資料放在一個分區上,將05年到08年之間的資料放到另一個分區上,以此類推。橫向分區所根據的列必須在叢集索引上,通常會根據時間,主鍵id等進行劃分。

橫向分區將資料劃分為不同的區,在根據分區列條件進行查詢時可以縮小查詢的範圍,從而提高查詢的效能;另外如果資料庫伺服器有多個cpu,則可以通過並行操作獲得更好的效能。

到底要根據那個列進行橫向的分區和查詢有關係,我們在建表的時候需要分析,會根據那個列進行查詢。

舉例:
1. 訂單是一個實效性很強的實體,我們很少查詢幾年前的訂單資料,我們就可以在訂單的建立時間列上建立分區函數來做分區。
2. 比如文章通常情況下只有在首頁推薦的最新的文章被訪問次數很多,而幾年前的文章被訪問的幾率較小,這時候我們可以根據文章的主鍵id來做分區,id小於300w的在一個分區上,id在300到600w之間的在一個分區上。

有關分區的更多資訊,請參考高效能網站建設之 MS Sql Server資料庫分區
有關如何進行分區,請參考Sql Server 分區演練

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.