优化数据库

时间:2013-11-28 08:14:17

标签: sql sql-server azure-sql-database federation

我有一个名为MetricTbl的表,其中的字段为User_Id,Entity,Metric,ModifiedDate,Value。值,UserId是整数。实体和指标是nvarchar。表有大约3000万行。

我想优化查询 - 从MetricTbl中选择SUM(值),其中UserId = 1,Entity ='Room',Metric ='Temperature'

我必须为这种查询设计策略。我正在使用azure联合会。这是一个联合表。 我已经在User_Id,Entity,Metric,ModifiedDate上创建了唯一索引。由于它是azure联邦,所以我不能索引视图。 请提出一些策略。 如果有需要,我可以创建新表。 谢谢 和Manish

1 个答案:

答案 0 :(得分:0)

我对Azure Federation技术并不是很熟悉,但在上面描述的典型场景中,我会创建一个覆盖WHERE子句中使用的所有列的索引,INCLUDE包含您的列中的列选择。如果可能的话,我还会将索引创建为已过滤以节省空间和性能,具体取决于每个WHERE列中是否有许多值,您永远不会查询它们。

IE,如果您只需要查询虚拟值,如“温度”,“距离”和“压力”,您可以这样做。

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

但如上所述,实际指数完全取决于您的特定情况。我必须提醒您,免责声明我不知道Azure Federation上的分片对此有什么特殊影响。可能没有,但我不能确定。