0

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

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

我必须为这种查询设计一个策略。我正在使用天蓝色联邦。这是一个联合表。我已经在 User_Id、Entity、Metric、ModifiedDate 上创建了唯一索引。因为它是天蓝色的联邦所以我不能有索引视图。请提出一些策略。如果需要,我可以创建新表。谢谢马尼什

4

1 回答 1

0

我对 Azure 联合技术并不十分熟悉,但在您上面描述的典型场景中,我将创建一个涵盖 WHERE 子句中使用的所有列的单个索引,其中 INCLUDE 包含您的 SELECT 中的列。如果可能,我还将创建过滤后的索引以节省空间和性能,具体取决于您永远不会查询的每个 WHERE 列中是否有很多值。

IE,如果您只需要查询“温度”、“距离”和“压力”等虚值,您可以执行类似的操作。

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

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

于 2013-11-28T08:39:32.837 回答