国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Asp.Net 網站優化系列之數據庫優化 分字訣 分表(縱向拆分,橫向分區)

2024-07-10 13:25:38
字體:
來源:轉載
供稿:網友
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 分區演練
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃江县| 富川| 新邵县| 南召县| 积石山| 房产| 巴彦县| 和龙市| 蒙城县| 永顺县| 屏山县| 调兵山市| 左贡县| 城固县| 鹤山市| 夏邑县| 桃园县| 南丰县| 密云县| 桂阳县| 白河县| 泰顺县| 南充市| 洛南县| 开平市| 呼伦贝尔市| 保亭| 会泽县| 仁布县| 华阴市| 青河县| 营山县| 通辽市| 班戈县| 宜阳县| 行唐县| 湖州市| 双鸭山市| 永州市| 句容市| 延吉市|