SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐_第1頁(yè)
SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐_第2頁(yè)
SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐_第3頁(yè)
SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐_第4頁(yè)
SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SQL Server 數(shù)據(jù)倉(cāng) 庫(kù)最佳實(shí)踐 Level 300 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 課程內(nèi)容 數(shù)據(jù)倉(cāng)庫(kù)設(shè)計(jì)與最佳實(shí)踐 設(shè)計(jì) 最佳實(shí)踐 案例 2 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 數(shù)據(jù)倉(cāng)庫(kù)基本概念 數(shù)據(jù) 和 信息 的區(qū)別 數(shù)據(jù) 是由可觀察和可記錄的事實(shí)組成,通常存在于OLTP系統(tǒng)中。 數(shù)據(jù)只有被加工處理為 信息 后,才有意義。 信息 是經(jīng)過(guò)加工處理并對(duì)人類客觀行為產(chǎn)生影響的數(shù)據(jù)表現(xiàn)形式。 3 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 Kimball 數(shù)據(jù)倉(cāng)庫(kù)建設(shè) 4 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 一、定義業(yè)務(wù)需求 了解業(yè) 務(wù) 訪談業(yè) 務(wù)人員 和IT 記錄匯 報(bào) 從業(yè)務(wù) 需求中 提

2、煉業(yè) 務(wù)流程 建立初 始總線 矩陣 5 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 說(shuō)明 提煉業(yè)務(wù)流程 初始化數(shù)據(jù)倉(cāng)庫(kù)總線矩陣 6 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 二、維度建模 7 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 四步建模過(guò)程 識(shí)別業(yè)務(wù) 流程 確定粒度選擇維度選擇事實(shí) 8 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 Adventure Works Cycles公司企業(yè) 數(shù)據(jù)倉(cāng)庫(kù)總線矩陣 -全公司 9 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 定義業(yè)務(wù)流程優(yōu)先級(jí)業(yè)務(wù)流程 數(shù)據(jù)可行性低,業(yè)務(wù)價(jià)值/影響低 10 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 確定粒度 維度中粒度表示法 業(yè)務(wù)流程的粒度及基礎(chǔ)度量 11 SQL

3、Server數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 業(yè)務(wù)角色矩陣 定義角色,明晰每個(gè)角色需要看 的業(yè)務(wù)流程數(shù)據(jù) 進(jìn)一步可進(jìn)行數(shù)據(jù)安全性的設(shè)計(jì) 12 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 定義維度屬性 / 數(shù)據(jù)質(zhì)量分析 定義維度屬性 源系統(tǒng)數(shù)據(jù)質(zhì)量分析 13 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 為每個(gè)業(yè)務(wù)流程定義詳細(xì)維度模 型 Sales Order Item Quantity Unit Cost Total Cost Unit Price Sales Amount Shipping Cost Time (Order Date and Ship Date) Salesperson CustomerProduct Cal

4、endar Year Month Date Fiscal Year Fiscal Quarter Month Date Region Country Territory Manager Name Name Country State or Province City Age Marital Status Gender Category Subcategory Product Name Color Size 14 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 根據(jù)維度模型詳細(xì)定義進(jìn)行數(shù)據(jù) 倉(cāng)庫(kù)邏輯設(shè)計(jì) 維度表 事實(shí)表 星型架構(gòu) 15 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 雪花型架構(gòu) 以下情況考慮: 在多個(gè)維

5、度之間 共享的子維度 存在層次結(jié)構(gòu), 并且維度表包含 變化頻繁的小的 數(shù)據(jù)子集 多個(gè)不同粒度的 事實(shí)表引用到維 度層次結(jié)構(gòu)的不 同層級(jí) DimSalesPerson SalesPersonKey SalesPersonName StoreKey DimProduct ProductKey ProductName ProductLineKey SupplierKey DimCustomer CustomerKey CustomerName GeographyKey FactOrders CustomerKey SalesPersonKey ProductKey ShippingAgentKey

6、TimeKey OrderNo LineItemNo Quantity Revenue Cost Profit DimDate DateKey Year Quarter Month Day DimShippingAgent ShippingAgentKey ShippingAgentName DimProductLine ProductLineKey ProductLineName DimGeography GeographyKey City Region DimSupplier SupplierKey SupplierName DimStore StoreKey StoreName Geog

7、raphyKey 16 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 維度表邏輯設(shè)計(jì)-鍵 代理建業(yè)務(wù)鍵 17 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 屬性和層次結(jié)構(gòu) 層次結(jié)構(gòu) 切片鉆取明細(xì) 18 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 Unknown 和 None 識(shí)別 NULL 值的含義 Unknown 還是 None? 不要假設(shè) NULL 等價(jià) 使用 ISNULL( ) 源 維度表 19 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 設(shè)計(jì)緩慢漸變維度 類型1 類型 2 類型 3 20 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 時(shí)間維度表 代理鍵 粒度 范圍 屬性和層次結(jié)構(gòu) 多日歷 未知值 ETL 還是預(yù)先填充? 21 SQ

8、LServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 自關(guān)聯(lián)的維度表 Kim Abercrombie Kamil Amireh Jeff Hay Cesar Garcia 備注:如果層次固定,還是建議重構(gòu)成固定層次的平面表,然后創(chuàng)建層次結(jié)構(gòu), 父子層次結(jié)構(gòu)如果中間層級(jí)過(guò)多,性能不好。 22 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 垃圾(Junk)維度 將不屬于已有維度的低基數(shù)屬性合并到一起 避免創(chuàng)建很多小的維度表 23 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 事實(shí)表設(shè)計(jì)-列 維度鍵 度量值 退化維度 24 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 度量類型 累加 半累加 不可累加 25 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 事實(shí)表

9、的三種類型 26 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 示例 事務(wù)型事實(shí)表 周期性快照事實(shí)表 累計(jì)快照事實(shí)表 27 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 價(jià)值鏈跨業(yè)務(wù)流程共享維度 28 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 設(shè)計(jì)之其他考慮-Factless 事實(shí)表 如何獲取正在參加促銷活動(dòng)但是沒(méi)有銷售出去的產(chǎn)品信息? 29 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 設(shè)計(jì)之其他考慮-維度和事實(shí)之間多對(duì)多 多個(gè)維度值指派到一個(gè)事實(shí)交易 如果需要為每一個(gè)銷售代表分配銷售,可以在中間表添加權(quán)重 30 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 設(shè)計(jì)之其他考慮-維度和維度之間 多對(duì)多 例如:一個(gè)客戶有一個(gè)或多個(gè)Accoun

10、t,一個(gè)Account對(duì)應(yīng)一個(gè)或多個(gè)客戶 31 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 三、技術(shù)架構(gòu)設(shè)計(jì) 32 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 微軟DW / BI 系統(tǒng)體系結(jié)構(gòu) 33 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 服務(wù)器架構(gòu)(1) 34 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 服務(wù)器架構(gòu)(2) 35 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 開發(fā)團(tuán)隊(duì)配置 36 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 四、數(shù)據(jù)倉(cāng)庫(kù)物理設(shè)計(jì) 37 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 物理數(shù)據(jù)分布 跨物理設(shè)備分布數(shù)據(jù): 使用文件組和RAID存儲(chǔ)(推薦RAID10) 數(shù)據(jù)文件和日志文件分開存儲(chǔ) 工作區(qū)對(duì)象單獨(dú)存儲(chǔ): 例如,臨

11、時(shí)的數(shù)據(jù)表 預(yù)先分類空間禁用自動(dòng)增長(zhǎng) 為所有文件分配一樣的尺寸 38 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 維度表-索引 代理鍵創(chuàng)建聚集索引 業(yè)務(wù)鍵創(chuàng)建非聚集索引 Include(代理鍵),加速Lookup效率 經(jīng)常查詢的屬性創(chuàng)建非聚集索引 對(duì)于非常大的包含緩變屬性的維度 創(chuàng)建四列索引:索引鍵(業(yè)務(wù)鍵,開始日期), 包含(結(jié)束時(shí)間,代理鍵) 這樣可以加速ETL處理過(guò)程 39 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 維度表-視圖 通過(guò)視圖封裝 例如在雪花型架構(gòu)中,通過(guò)創(chuàng)建視圖可以把多 個(gè)維度表連接起來(lái) 可以將視圖定義成索引視圖,從而將數(shù)據(jù)物理 化 40 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 維度表物理創(chuàng)

12、建腳本(示例 All in One) CREATE TABLE dbo.DimProduct( ProductKey int IDENTITY(1,1) NOT NULL, BKProductSKU nvarchar (25) NOT NULL DEFAULT NZZ-000-ZZ, ProductName nvarchar(50) NOT NULL DEFAULT NProduct unknown or not provided, ProductSubCategory nvarchar(50) NOT NULL DEFAULT NProduct Subcategory unknown or

13、not provided, ProductCategory nvarchar(50) NOT NULL DEFAULT NProduct Category unknown or not provided, CONSTRAINT PK_dbo.DimProduct PRIMARY KEY CLUSTERED (ProductKey ASC) ) ON Dim WITH ( DATA_COMPRESSION = PAGE ); - only if this is a very big dimension - 為表描述創(chuàng)建擴(kuò)展屬性 exec sys.sp_addextendedproperty na

14、me=NTable Description, value=NInformation about products, level0type=NSCHEMA, level0name=dbo, level1type=NTABLE, level1name=DimProduct; GO; - 創(chuàng)建用戶訪問(wèn)視圖 CREATE VIEW Product AS SELECT ProductKey, BKProductSKU, ProductName, ProductSubCategory, ProductCategory FROM DimProduct; GO; 41 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 事實(shí)

15、表-數(shù)據(jù)類型 / 約束 數(shù)據(jù)類型 約束 盡量避免主鍵和外鍵,加快數(shù)據(jù)加載 完整性靠ETL來(lái)保障 事實(shí)列類型事實(shí)列類型最快的最快的 SQL Server 數(shù)據(jù)類型數(shù)據(jù)類型 代理鍵代理鍵tinyint、smallint、int、bigint 日期鍵日期鍵采用 yyyyMMdd 格式的 int 整數(shù)度量值整數(shù)度量值tinyint、smallint、int、bigint 數(shù)值度量值數(shù)值度量值smallmoney、money、real、float (請(qǐng)注意,與 money 和 float 類型相比,decimal 和 vardecimal 要求更強(qiáng)大的 CPU 處理能力) 非重復(fù)計(jì)數(shù)列非重復(fù)計(jì)數(shù)列tin

16、yint、smallint、int、bigint (如果您的計(jì)數(shù)列是 char,則考慮執(zhí)行哈希計(jì)算或用代理鍵進(jìn)行替換) 42 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 事實(shí)表-分區(qū) 對(duì)大事實(shí)表進(jìn)行分區(qū): 通常是日期鍵 好處: 通過(guò)分區(qū)表并行掃描提高查 詢性能 提高CUBE處理速度 快速加載和刪除 改進(jìn)索引管理性 增強(qiáng)備份和還原的靈活性 使用分區(qū)對(duì)其的索引視圖: 索引視圖和表分區(qū)對(duì)區(qū) 實(shí)現(xiàn)過(guò)程 創(chuàng)建文件組和文件 創(chuàng)建分區(qū)函數(shù) 創(chuàng)建分區(qū)方案 創(chuàng)建分區(qū)表 對(duì)于已經(jīng)存在的事實(shí)表可以 通過(guò)重建聚集索引來(lái)分區(qū) Pre-JanJanJunJulDec 43 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 分區(qū)數(shù)據(jù)分布與操作示

17、例 44 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 滑動(dòng)窗口 保持一個(gè)時(shí)間段內(nèi)的事實(shí)數(shù)據(jù)在線 加載最新的數(shù)據(jù),卸載最老的數(shù)據(jù) 兩種加載新數(shù)據(jù)的方式 一次性加載整個(gè)新分區(qū) 增量加載最新分區(qū) 總為兩端各保留一個(gè)空分區(qū) 45 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 加載最新數(shù)據(jù) 在與目標(biāo)分區(qū)所在的文件組上創(chuàng)建中間表 (5/2008) 拆分 最新的分區(qū) 批量加載(Bulk Insert 或者bcp)并索引中間表 交換 數(shù)據(jù)到次新分區(qū) 46 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 卸載過(guò)期數(shù)據(jù) 在目標(biāo)分區(qū)同一上創(chuàng)建用于卸載的表 交換 數(shù)據(jù)到表中 合并 第一個(gè)和第二個(gè)分區(qū) 存檔或清空表 47 SQLServer數(shù)據(jù)倉(cāng)庫(kù)

18、最佳實(shí)踐 避免 拆分 / 合并 非空分區(qū) 效率很低 額外的日志 只Split / Merge 空分區(qū) 即使需要臨時(shí)用 SWITCH 清空分區(qū) 48 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 加載歷史數(shù)據(jù) 使用 簡(jiǎn) 單或 大 容量日 志恢復(fù) 模式 創(chuàng)建沒(méi) 有索引 的分區(qū) 表 為每個(gè) 分區(qū)創(chuàng) 建沒(méi)有 索引的 表 并發(fā)加 載每個(gè) 分區(qū)對(duì) 應(yīng)的表 交換所 有表到 對(duì)應(yīng)的 分區(qū) 創(chuàng)建聚 集索引 創(chuàng)建非 聚集索 引 49 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 刪除數(shù)據(jù) 盡可能使用交換分區(qū) 從未分區(qū)的表中刪除大量行 避免 delete fromwhere 帶來(lái)大量鎖和日志 INSERT需要的行到新表通常更快 50

19、SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 演示演示1 1:對(duì)事實(shí)表分區(qū):對(duì)事實(shí)表分區(qū) 演示演示2 2:加載新數(shù)據(jù)加載新數(shù)據(jù) 演示演示3 3:歸檔舊數(shù)據(jù):歸檔舊數(shù)據(jù) 演示演示4 4:實(shí)現(xiàn)滑動(dòng)窗口:實(shí)現(xiàn)滑動(dòng)窗口 51 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 事實(shí)表-索引 索引建議 為日期列創(chuàng)建聚集索引,如果有多個(gè)日期列, 則選擇其中一個(gè)(如OrderDate) 支持某一時(shí)間段的快速順序掃描 如果需要分區(qū),先考慮分區(qū)字段 為每一個(gè)外鍵列創(chuàng)建非聚集索引 Index(外鍵,日期),用于針對(duì)某一維度的選擇性 查詢 除非關(guān)聯(lián)的維度基數(shù)很低 列存儲(chǔ)索引(SQL Server 2012以后的版本) 檢查缺失的索引 sys

20、.dm_db_missing_index_group_stats, sys.dm_db_missing_index_groups and sys.dm_db_missing_index_details 檢查索引索引 sys.dm_db_index_physical_stats 的 avg_fragmentation_in_percent ,不應(yīng)該大于25% 52 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 事實(shí)表-數(shù)據(jù)壓縮 減少物理空間需求 可以改進(jìn)IO綁定查詢的性能 CPU綁定的查詢額外20-30%的負(fù)載 兩種壓縮方式: 行壓縮:將定長(zhǎng)字段存儲(chǔ)成變長(zhǎng)字段 頁(yè)壓縮:在一個(gè)頁(yè)上存儲(chǔ)冗余數(shù)據(jù)的一個(gè)實(shí)例 可

21、以在以下對(duì)象上啟用: 表 索引 分區(qū) Pre-Jan (頁(yè)壓縮) JanJun (行壓縮) JulDec (不壓縮) 例如: 一月份之前很少訪問(wèn) 一月到六月中等頻率訪問(wèn) 七月到十二月經(jīng)常頻繁訪問(wèn) 53 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 事實(shí)表-數(shù)據(jù)壓縮示例 AdventureworksDW數(shù)據(jù)倉(cāng)庫(kù)中的FactInternetSales事實(shí)表 54 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 55 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 課程內(nèi)容 數(shù)據(jù)倉(cāng)庫(kù)設(shè)計(jì)與最佳實(shí)踐 設(shè)計(jì) 最佳實(shí)踐 案例 ETL設(shè)計(jì)與最佳實(shí)踐 設(shè)計(jì) 最佳實(shí)踐 案例 CUBE設(shè)計(jì)與最佳實(shí)踐 設(shè)計(jì) 最佳實(shí)踐 案例 56 SQLServer

22、數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 一、考慮對(duì)大事實(shí)表分區(qū)一、考慮對(duì)大事實(shí)表分區(qū) 大事實(shí)表:50100GB及以上 查詢被限制在一個(gè)分區(qū)內(nèi)快速完成 通常在日期鍵對(duì)事實(shí)表分區(qū) 啟用滑動(dòng)窗口 57 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 二、在事實(shí)表的日期字段創(chuàng)建聚在事實(shí)表的日期字段創(chuàng)建聚 集索引集索引 可以高效的CUBE處理(CUBE處理的時(shí)候可 以并行處理多個(gè)分區(qū))以及檢索歷史數(shù)據(jù) 切片 如果在批窗口加載數(shù)據(jù),可以在創(chuàng)建或者 重建事實(shí)表的聚集索引的時(shí)候使用 ALLOW_ROW_LOCKS = OFF 和 ALLOW_PAGE_LOCKS = OFF。這可以加速查 詢時(shí)表掃描操作并可以幫助在大量數(shù)據(jù)更 新的時(shí)候避免過(guò)度

23、的鎖活動(dòng)。 為每一個(gè)外鍵建立非聚集索引,這有助于 基于選擇的維度謂詞進(jìn)行精確的查詢來(lái)獲 取數(shù)據(jù) 使用文件組用于管理目的,例如備份/還原, 部分?jǐn)?shù)據(jù)庫(kù)可用性等。 58 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 三、小心的選擇分區(qū)粒度三、小心的選擇分區(qū)粒度 大多數(shù)客戶使用月,季度或者年。 為了有效刪除,必須一次刪除一個(gè)分區(qū)。 一次加載一個(gè)完成的分區(qū)非???對(duì)于每日的數(shù)據(jù)加載進(jìn)行按日的分區(qū)是一個(gè)有吸引力的選擇 SQL Server 2008 SP1只支持1000個(gè)分區(qū),SP2則可以支持15000個(gè)分區(qū)。 分區(qū)粒度影響查詢的并行性 并行線程(注意MAXDOP設(shè)置)是分布式的掃描分區(qū),并且即時(shí)多個(gè)分區(qū)需要 掃

24、描的時(shí)候,每個(gè)分區(qū)都可以使用多個(gè)線程。 如果經(jīng)常執(zhí)行的查詢只訪問(wèn)23個(gè)分區(qū),不建議進(jìn)行分區(qū)設(shè)計(jì) (如果需要MAXDOP并行,假設(shè)MAXDOP=4或更高) 59 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 四、正確的設(shè)計(jì)維度表正確的設(shè)計(jì)維度表 為所有維度的代理鍵使用整型數(shù)據(jù)類型,越小越好,這樣可以使得事 實(shí)表比較窄。 使用有意義的整數(shù)型日期鍵(例如: ,根據(jù)日期生成) 不要使用代理鍵 很容易在寫查詢時(shí)使用該字段作為條件 為每一個(gè)維度表在代理鍵上創(chuàng)建聚集索引,在業(yè)務(wù)鍵創(chuàng)建非聚集索引 (可能包含行開始時(shí)間字段)來(lái)支持加載時(shí)查找代理鍵。 在經(jīng)常搜索的字段上創(chuàng)建非聚集索引 不要分區(qū)維度表 不要在事實(shí)表和維度表之

25、間強(qiáng)制外鍵約束,這樣可以運(yùn)行快速數(shù)據(jù)加 載,一定需要的話可以創(chuàng)建 使用 NOCHECK 的外鍵,在SSIS中使用查找 轉(zhuǎn)化來(lái)強(qiáng)制參照完成性,或者在數(shù)據(jù)源執(zhí)行數(shù)據(jù)完整性檢查。 60 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 五、撰寫有效的查詢 如何可以的,直接使用事實(shí)表上的分區(qū)鍵 (日期維度鍵)作為查詢謂詞 這樣可以只查詢數(shù)據(jù)所在的分區(qū)。 61 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 六、使用滑動(dòng)窗口技術(shù)維護(hù)數(shù)據(jù)使用滑動(dòng)窗口技術(shù)維護(hù)數(shù)據(jù) 為事實(shí)表的在線訪問(wèn)維護(hù)一個(gè)滑動(dòng)的時(shí)間 窗口。加載新數(shù)據(jù),卸載就數(shù)據(jù)。 在分區(qū)范圍的兩端總是保留一個(gè)空分區(qū) (加載新數(shù)據(jù)前通過(guò)拆分分區(qū)生成,卸載 舊數(shù)據(jù)后通過(guò)分區(qū)合并生成)

26、,這樣不會(huì) 導(dǎo)致數(shù)據(jù)移動(dòng)。 一定不要拆分或者合并已有數(shù)據(jù)的分區(qū), 這樣非常低效率,并且會(huì)導(dǎo)致最多4倍的日 志生成,同時(shí)會(huì)導(dǎo)致大量的鎖。 在要加載數(shù)據(jù)的分區(qū)所在的文件組中創(chuàng)建 中間臨時(shí)表。 在要卸載數(shù)據(jù)的分區(qū)所在的文件組中創(chuàng)建 中間臨時(shí)表。 一次加載整個(gè)分區(qū)是非??斓?,但是僅可 能在分區(qū)大小和數(shù)據(jù)加載的頻率是一樣的 (例如:每天一個(gè)分區(qū),數(shù)據(jù)加載的頻率 也是每天一次)。 如果分區(qū)大小和數(shù)據(jù)加載頻率不一致,增 量加載最新的分區(qū)。 總是一次卸載一個(gè)分區(qū) 62 SQLServer數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐 七、高效的加載初始化數(shù)據(jù) 在初始化加載時(shí)使用簡(jiǎn)單或者大容量日志記錄恢復(fù)模式。 創(chuàng)建帶聚集索引的分區(qū)事實(shí)表 為每個(gè)分區(qū)創(chuàng)建沒(méi)有索引的中間臨時(shí)表,和用于填充每個(gè)分區(qū)的源數(shù)據(jù)文件。 并行填充所有中間臨時(shí)表 使用多個(gè)BULK INSERT,BCP或者SSIS任務(wù) 如果沒(méi)有IO瓶頸的話,創(chuàng)建盡可能多個(gè)加載腳本來(lái)并行執(zhí)行,如果IO有限,減少并行執(zhí)行的腳本數(shù)量。 加載時(shí)使用大小為 0 的CommitSize。 加載時(shí)使用 大小為0 BatchSize 使用TABLOCK 如果源數(shù)據(jù)文件在同一服務(wù)器上,使用BULK INSERT,如果來(lái)自遠(yuǎn)程服務(wù)器使用bcp或者SSIS 在每一個(gè)中間臨時(shí)表創(chuàng)建聚集索引,然后創(chuàng)建CHECK約束。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論