標籤:
最近對公司資料庫效能方面改造。現已初建成效。
公司原先資料庫問題頗多,簡單列舉下:
1.資料表文檔缺失。
2.資料庫900多張表,接近一半都是備份和一些報表,沒有分庫處理
3.大數量的表按照年份人工匯出建立曆史庫
4.欄位類型存在濫用,毫無資料庫最佳化
如果有哪位兄弟不幸同命相連 ,說的寒心點,這基本就是個爛攤子。好在天下難事必作於細,一步一步最佳化。
我的最佳化步驟是分析業務代碼->補全資料庫文檔->改造業務系統->最佳化資料庫->改造業務系統
由於業務太過複雜,不易重做,所以還是採取比較悲催的做法。
經過此次也算是個學習與實踐的過程吧。
使用表分區的情境:
其實公司的資料量真不多,每年最多的資料就百來萬,和上家根本沒法比。但是由於資料庫設計實在糟糕,查詢效能簡直不忍直視啊。
除了建索引外,我還對對日期進行的分區處理。
以下是用到的命令, 記錄下備用
--========================================
-- 建立檔案組
選中資料庫->屬性->檔案組->建立
--========================================
-- 建立表分區函數
create partition function fnPartition (int) as Range right
for values(100,200,300)
select * from sys.partition_functions
--========================================
-- 建立表分區架構
create partition scheme schemaforpartition
as partition fnPartition
to ([primary],[primary],[primary],[primary])
select * from sys.partition_schemes
--========================================
-- 修改表分區
alter table Base_User drop constraint PK_Base_User_UserID--刪除現有表的主鍵(對有全文索引的只能再管理器中去除主鍵)
ALTER TABLE [dbo].Base_User WITH NOCHECK ADD
CONSTRAINT PK_Base_User_ID PRIMARY KEY CLUSTERED
(
[UserID]--注意ID這裡是你原來的那些主鍵組成的列
) ON schemaforpartition ([UserID])--將主鍵建立到ps_Product_Scheme_mTb分區函數上
SELECT *, $PARTITION.fnPartition([UserID]) AS PF FROM Base_User
--=============================================
-- 分割後多出來的分區存在在哪個檔案組
alter partition scheme schemaforpartition next Used ‘primary‘
--添加分割點
alter partition function fnPartition() split range (400)
--=============================================
--合并分割點
alter partition function fnPartition() merge range (100)
參考:
http://kb.cnblogs.com/page/73921/
http://www.cnblogs.com/sienpower/archive/2011/12/31/2308741.html
sqlserver拾遺-表分區