最佳化結構的方式
分離使用者資料庫與系統資料庫
建立資料庫表分區
建立垂直分表
建立水平分表
資料庫物件的部署 混合放置的缺點
在我們建立資料庫的時候,一般來說使用者資料庫預設路徑和系統資料庫是放在一起的,這種部署方式有嚴重問題:假如有一個第三波書店的資料庫,使用者對它頻繁訪問,資料庫所在的磁碟輸送量已經接近極限,那麼這個時候系統資料表就沒有更多的資源來使用,就可能導致長時間的排隊或者死結。為了減少多個表之間的資源爭奪可以把多個資料庫物件分開放在不同的磁碟上。也就是實現分離使用者資料庫和系統資料庫
分離使用者資料庫與系統資料庫【降低資源競爭】
減少資源競爭
盡量避免資料死結
如果資料庫已經建立推薦以下實踐步驟:
1. 分離資料庫
2. 找到分離後的資料檔案和記錄檔,分表將記錄檔和資料檔案複製到不同磁碟的目錄下
3. 附加移位後的資料庫檔案還原資料庫
檔案和檔案組
檔案和檔案組允許跨磁碟、磁碟控制卡、RAID建立資料庫
比如計算上有四個物理磁碟,那麼可以建立一個由三個資料檔案和一個記錄檔組成的資料庫,這樣在對資料進行訪問的時候四個讀寫的磁頭可以同時並行地訪問資料,從而加快資料庫操作速度。
檔案和檔案組還允許資料布局,可以在特定的檔案組上建立表,這樣可以改善效能
我們可以將特定的表所有的IO都定向到一個特定的磁碟,那麼如何在檔案組上見表?
文法:
CREATE TABLE [表名]
(
--表欄位1
--表欄位2
) ON [PRIMARY/檔案組名]
建立垂直分表 將大型表從欄位上分,這叫垂直分表 垂直分表通常是將大型表的大文字欄位從原表分離【將大文字欄位分離後原來的資料頁上每頁可以儲存更多的資料】,然後儲存在其它表中
例如從圖書表中將ContentDescription、TOC欄位分離出來放在單獨的表中,這兩個欄位是nvarchar(max)類型
垂直分表代碼示範:
---分離大文字欄位
SELECT A.ContentDescription,A.TOC,A.Id
INTO Book_detail
FROM Book A
---從原表中刪除原來的大文字欄位
ALTER TABLE BOOK
DROP COLUMN CONTENTDESCRIPTION
ALTER TABLE BOOK
DROP COLUMN TOC
建立水平分表
將大型表從資料類別上或者時間欄位上分,這叫水平分表
水平分表通常做法比較多,根據不同的業務需求有不同的劃分
水平分表示範:
SELECT
INTO
BOOK_2008
FROM BOOK
WHERE PUBLISHERDATE>='2008-1-1' AND PUBLISHDATE<'2009-1-1'
SELECT
INTO
BOOK_2009
FROM BOOK
WHERE PUBLISHERDATE>='2009-1-1' AND PUBLISHDATE<'2010-1-1'
SELECT
INTO
BOOK_2010
FROM BOOK
WHERE PUBLISHERDATE>='2010-1-1' AND PUBLISHDATE<'2011-1-1'
注意:事前良好的資料庫設計【預計資料規模負荷有多大決定是否採用水平分表】勝過事後進行水平分表【事後分表可能引起程式較大改動】。