2013-11-28 152 views
0

我有一个名为MetricTbl的表,其中的字段为User_Id,Entity,Metric,ModifiedDate,Value。值,UserId是整数。实体和度量标准是nvarchar。表格大约有三千万行。数据库优化

我想优化查询 - 从MetricTbl 选择SUM(价值),其中userid = 1,实体=“房间”和公制=“温度”

我要设计这种类型的查询策略。我正在使用天青联盟。这是一个联邦表。 我已经在User_Id,Entity,Metric,ModifiedDate上创建了唯一索引。由于它是天蓝色的联邦,所以我不能索引视图。 请建议一些策略。 如果有需要我可以创建新表。 感谢 马尼什

+0

你究竟想要什么? –

+0

_whoa 30 * 10^6 rows_这是什么问题呢? _选择来自MetricTbl的SUM(值),其中UserId = 1且实体='房间'和度量='温度'_ –

+2

添加用户ID,实体,度量值的索引,包含列 –

回答

0

我不是很熟悉Azure的联邦技术,但像你上面所描述的典型情况下,我会创建一个覆盖所有的WHERE子句中使用的列的单一指标,通过include包含SELECT中的列。如果可能的话,我还会创建索引作为过滤以节省空间和性能,具体取决于每个WHERE列中是否有许多值是您永远不会查询的。如果你只需要查询“温度”,“距离”和“压力”等虚数值,你可以做这样的事情。

CREATE NONCLUSTERED INDEX Metric_SUM_IDX ON MetricTbl (UserId, Entity, Metric) 
INCLUDE (Value) 
WHERE Metric IN ('Temperature','Distance','Pressure') 

但如上所述,实际指标完全取决于您的特定情况。我必须提醒您的是,我不知道Azure Federation上的分片可能会对此产生什么样的特殊效果。可能没有,但我不能确定。

+0

分片没有特殊效果...我只提到了分片数据库中的一个......但我的问题是20k用户插入记录,每个条目都是一个关键值对,并且有大约100个关键值对,所以我每天有大约200万条记录,然后每15分钟记录一次就会更新。第二天我再次有200万条记录,将有大约10K用户访问我的网站,显示累计记录/月/季度,用户可以要求定制报告。我必须优化这个过程。 – manishkr1608