sql分区-纵向分表与横向分区表(转)
1. 縱向分表
縱向分表是指將一個有20列的表根據(jù)列拆分成兩個表一個表10列一個表11列,這樣單個表的容量就會減少很多,可以提高查詢的性能,并在一定程度上減少鎖行,鎖表帶來的性能損耗。
縱向分表的原則是什么呢,應該怎樣拆分呢?答案是根據(jù)業(yè)務邏輯的需要來拆分,對于一張表如果業(yè)務上分兩次訪問某一張表其中一部分數(shù)據(jù),那么就可以根 據(jù)每次訪問列的不同來做拆分; 另外還可以根據(jù)列更新的頻率來拆分,例如某些列每天要更新3次,有些列從創(chuàng)建開始基本上很少更新。
舉例: 假定場景,我有一張用戶表,這張表包含列: ID, UserName, Password, RealName, Gender, Email, IsEmailValid, Birthday, Country, City, Address, Mobile, Phone, ZipCode, Hometown, OfficePhone, Company, Position, Industry, LatestLoginTime, LatestLoginIP, LoginTimes,OnlineMinutes
假定現(xiàn)在我們的登錄出現(xiàn)了性能問題,用戶登錄經(jīng)常出現(xiàn)數(shù)據(jù)庫超時的現(xiàn)象。我們打算用拆表的方法解決這個問題。先看下涉及到登錄的字段 有:UserName,Password,LatestLoginTime,LatestLoginIP,LoginTimes;那么我們就可以以此為依 據(jù)將原表拆分為:UserLogin和UserBase 兩個表,后者包含除了登錄信息的其他列信息;兩張表都要包含主鍵ID。
2. 橫向分區(qū)
橫向分區(qū)是將表從行的角度拆分,例如將創(chuàng)建時間在05年之前的數(shù)據(jù)放在一個分區(qū)上,將05年到08年之間的數(shù)據(jù)放到另一個分區(qū)上,以此類推。橫向分區(qū)所根據(jù)的列必須在聚集索引上,通常會根據(jù)時間,主鍵id等進行劃分。
橫向分區(qū)將數(shù)據(jù)劃分為不同的區(qū),在根據(jù)分區(qū)列條件進行查詢時可以縮小查詢的范圍,從而提高查詢的性能;另外如果數(shù)據(jù)庫服務器有多個cpu,則可以通過并行操作獲得更好的性能。
到底要根據(jù)那個列進行橫向的分區(qū)和查詢有關(guān)系,我們在建表的時候需要分析,會根據(jù)那個列進行查詢。
舉例: 1. 訂單是一個實效性很強的實體,我們很少查詢幾年前的訂單數(shù)據(jù),我們就可以在訂單的創(chuàng)建時間列上創(chuàng)建分區(qū)函數(shù)來做分區(qū)。 2. 比如帖子通常情況下只有在首頁推薦的最新的帖子被訪問次數(shù)很多,而幾年前的帖子被訪問的幾率較小,這時候我們可以根據(jù)帖子的主鍵id來做分區(qū),id小于 300w的在一個分區(qū)上,id在300到600w之間的在一個分區(qū)上。
轉(zhuǎn)載于:https://www.cnblogs.com/tonykan/archive/2013/05/18/3084918.html
總結(jié)
以上是生活随笔為你收集整理的sql分区-纵向分表与横向分区表(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android源码查看源码的版本
- 下一篇: CentOS 6.4 配置LAMP 环境