2013-11-28 151 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