Asp.Net 網(wǎng)站優(yōu)化系列之?dāng)?shù)據(jù)庫優(yōu)化 分字訣 分表(縱向拆分,橫向分區(qū))
縱向分表是指將一個(gè)有20列的表根據(jù)列拆分成兩個(gè)表一個(gè)表10列一個(gè)表11列,這樣單個(gè)表的容量就會減少很多,可以提高查詢的性能,并在一定程度上減少鎖行,鎖表帶來的性能損耗。
縱向分表的原則是什么呢,應(yīng)該怎樣拆分呢?答案是根據(jù)業(yè)務(wù)邏輯的需要來拆分,對于一張表如果業(yè)務(wù)上分兩次訪問某一張表其中一部分?jǐn)?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ù)庫超時(shí)的現(xiàn)象。我們打算用拆表的方法解決這個(gè)問題。先看下涉及到登錄的字段有:UserName,Password,LatestLoginTime,LatestLoginIP,LoginTimes;那么我們就可以以此為依據(jù)將原表拆分為:UserLogin和UserBase 兩個(gè)表,后者包含除了登錄信息的其他列信息;兩張表都要包含主鍵ID。
2. 橫向分區(qū)
橫向分區(qū)是將表從行的角度拆分,例如將創(chuàng)建時(shí)間在05年之前的數(shù)據(jù)放在一個(gè)分區(qū)上,將05年到08年之間的數(shù)據(jù)放到另一個(gè)分區(qū)上,以此類推。橫向分區(qū)所根據(jù)的列必須在聚集索引上,通常會根據(jù)時(shí)間,主鍵id等進(jìn)行劃分。
橫向分區(qū)將數(shù)據(jù)劃分為不同的區(qū),在根據(jù)分區(qū)列條件進(jìn)行查詢時(shí)可以縮小查詢的范圍,從而提高查詢的性能;另外如果數(shù)據(jù)庫服務(wù)器有多個(gè)cpu,則可以通過并行操作獲得更好的性能。
到底要根據(jù)那個(gè)列進(jìn)行橫向的分區(qū)和查詢有關(guān)系,我們在建表的時(shí)候需要分析,會根據(jù)那個(gè)列進(jìn)行查詢。
舉例:
1. 訂單是一個(gè)實(shí)效性很強(qiáng)的實(shí)體,我們很少查詢幾年前的訂單數(shù)據(jù),我們就可以在訂單的創(chuàng)建時(shí)間列上創(chuàng)建分區(qū)函數(shù)來做分區(qū)。
2. 比如帖子通常情況下只有在首頁推薦的最新的帖子被訪問次數(shù)很多,而幾年前的帖子被訪問的幾率較小,這時(shí)候我們可以根據(jù)帖子的主鍵id來做分區(qū),id小于300w的在一個(gè)分區(qū)上,id在300到600w之間的在一個(gè)分區(qū)上。
有關(guān)分區(qū)的更多信息,請參考高性能網(wǎng)站建設(shè)之 MS Sql Server數(shù)據(jù)庫分區(qū)
有關(guān)如何進(jìn)行分區(qū),請參考Sql Server 分區(qū)演練
- 對于ASP編碼問題的深入研究與最終解決方案
- Asp.Net 網(wǎng)站優(yōu)化系列之?dāng)?shù)據(jù)庫優(yōu)化分字訣上 分庫
- Asp.Net 網(wǎng)站優(yōu)化系列之?dāng)?shù)據(jù)庫優(yōu)化措施 使用主從庫(全)
- asp.net下數(shù)據(jù)庫操作優(yōu)化一例
- asp.net小談網(wǎng)站性能優(yōu)化
- Asp.net 網(wǎng)站性能優(yōu)化二則分享
- ASP.NET性能優(yōu)化之讓瀏覽器緩存動(dòng)態(tài)網(wǎng)頁的方法
- ASP.NET性能優(yōu)化之減少請求
- asp.net程序優(yōu)化 盡量減少數(shù)據(jù)庫連接操作
- Asp.Net性能優(yōu)化技巧匯總
- Asp編碼優(yōu)化技巧
相關(guān)文章
未處理的事件"PageIndexChanging" 之解決方案
今天我寫一個(gè)小程序遇到這個(gè)問題,上網(wǎng)搜了一下,已經(jīng)有很好的解決方法了,以前都是拉控件自己生成,現(xiàn)在用代碼自己寫就出現(xiàn)了這個(gè)問題2008-07-07一個(gè)Asp.Net的顯示分頁方法 附加實(shí)體轉(zhuǎn)換和存儲過程 帶源碼下載
現(xiàn)在自己寫的webform都不用服務(wù)器控件了,所以自己仿照aspnetpager寫了一個(gè)精簡實(shí)用的返回分頁顯示的html方法,其他話不說了,直接上代碼2012-10-10ASP.NET對HTML頁面元素進(jìn)行權(quán)限控制(二)
分三步實(shí)現(xiàn):標(biāo)出界面所要分配權(quán)限的元素、掃描界面獲取所要分配權(quán)限的元素信息、存入數(shù)據(jù)庫中,感興趣的朋友可以了解下2013-12-12asp.net repeater實(shí)現(xiàn)批量刪除
asp.net repeater實(shí)現(xiàn)批量刪除實(shí)現(xiàn)效果代碼2009-03-03Entity?Framework?Core相關(guān)包的概念介紹與安裝
這篇文章介紹了Entity?Framework?Core相關(guān)包的概念與安裝方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03asp.net request.PathInfo實(shí)現(xiàn)的url重寫
最近對在開始研究url重寫,對重寫的原理以及重寫之后引起的性能問題是研究的重點(diǎn),研究過程中發(fā)現(xiàn)了一種輕便的“url重寫方案”2009-04-04關(guān)于.NET動(dòng)態(tài)代理的介紹和應(yīng)用簡介
關(guān)于.NET動(dòng)態(tài)代理的介紹和應(yīng)用簡介...2006-09-09.Net?Core實(shí)現(xiàn)第三方QQ掃碼登錄
這篇文章介紹了.Net?Core實(shí)現(xiàn)第三方QQ掃碼登錄的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02asp.net中強(qiáng)制取消TFS2008中其它成員的簽出文件的方法
有個(gè)項(xiàng)目,以前的成員離職了,剛好又簽出了一個(gè)文件在TFS中并且上了鎖,導(dǎo)致后面的維護(hù)無法簽入和生成。在網(wǎng)上查了一下,找到了如下解決辦法2012-08-08