首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB索引维护( ETL过程)

DB索引维护( ETL过程)
EN

Database Administration用户
提问于 2018-07-30 16:17:22
回答 1查看 525关注 0票数 2

我计划设置一个the作业,以便在DW DB (通过ETL进程存储数据)中执行索引维护,并且随着业务的增长,最终需要更频繁地运行。

问题是,为了对通常从ETL进程加载数据的DW DB进行有效的索引维护,应该考虑哪些因素。

目前,我想实现Ola Hallengren使用的MP

T代码如下:

代码语言:javascript
复制
EXECUTE dbo.IndexOptimize
@Databases = 'StackOverflow2010',
@FragmentationLow = NULL,
@FragmentationMedium  = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 30,
@FragmentationLevel2 = 70,
@UpdateStatistics = 'ALL'

如有任何其他意见或建议,将不胜感激。

EN

回答 1

Database Administration用户

发布于 2018-08-03 13:23:44

如果您担心索引碎片(只有在磁盘上进行范围扫描时才真正重要),但是在ETL过程中定期加载数据,我假设您在ETL过程中启用(并更新)了您的索引。

当您加载数据时,您的索引必须在插入数据时随时更新,但最终会变得支离破碎,这就是您希望重新构建它们的原因。

在加载数据时只为稍后重新生成数据时维护索引对于Server来说是无用的。

我建议考虑的一种方法是

  • 在加载数据之前,禁用表上的所有非聚集索引。
  • 如果有集群密钥,则按聚集密钥的顺序加载数据(大多数数据仓库无论如何都使用代理密钥)
  • 加载数据后再次启用索引。这样,索引只在数据加载之后构建一次,并且将是连续的。

禁用和启用/重新生成表的所有索引的代码如下

代码语言:javascript
复制
ALTER INDEX ALL ON dbo.[Table Name] DISABLE

-- perform data load

ALTER INDEX ALL ON dbo.[Table Name] REBUILD
票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/213590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档