2014-09-04 36 views
0

我需要构建一个历史报告,它只能从150GB大小的表中提供读访问权限。我想知道我应该创建以下所有列索引:索引巨大表格所需的建议

  1. 我的报告有10个过滤器,要求用户input.E.g。日期时间,Varchar。我应该为它们创建10个索引吗?
  2. 我的报告有10个默认硬编码过滤器,例如where code="RAM"。我应该为他们创建另外10个索引吗?

我主要关心的是性能问题。

+0

应用10个默认硬编码过滤器后,剩下多少行?日常的载入甚至索引视图可能是一个很好的起点。 – 2014-09-04 08:46:50

+0

我还假设你不能创建一个汇总/报告表 – Liath 2014-09-04 08:48:06

+0

150GB是 - 啊 - 不是休息。家伙;)如果Threes很好但是不大,那么这个尺寸就是中等尺寸。抓住一些固态硬盘,看到东西飞(只需升级我们的服务器来处理3000GB数据)。 – TomTom 2014-09-04 08:51:45

回答

1

首先,你说你最关心的是表现。表演阅读或表演写作?

因为从理论上讲,你可以将一张表格编入索引到死亡状态,这会使阅读变得更好,但是每次插入或更新一行时都需要维护和更新。

第二选择标记应该基于哪些查询经常针对您的表运行。

例如,假设您有一个列表ID, Type, TextValue。在你的应用程序中,你有一个GetByID()方法和一个ListWithType()方法。您的标记应基于SQL试图过滤/加入的内容。在这种情况下,ID(您的PK显然)以及类型上的非唯一索引。

  • 决定哪些性能是很重要的(读或写)
  • 看你的代码,并遵守共同的和慢查询
  • 创建基于不同的过滤器indicies /加入你在干什么。

这显然是一个简单的概述。我建议你阅读如何阅读SQL Execution Plan并改变你的指示以改善它。

最后,当您创建标记时,请确保您选择了合适的fill factor(这取决于表的使用方式),否则您将不断重建它们。

+0

阅读中的表现。我的报告只允许阅读。 – VeecoTech 2014-09-04 08:49:21

+0

@belinq我是这么认为的,这是最常见的问题,并为我量身定制了大部分答案。 – Liath 2014-09-04 08:50:17