2012-09-21 35 views
0

我在這裏有一個包含數百萬個條目的表。該表存儲事件,每個事件都有一個時間戳。鑑於一些WHERE子句params,我想要最近的事件。SQL查詢獲取最近的行 - 針對Vertica DB進行了優化

這是我們想出了:

SELECT * 
FROM eventTable 
WHERE timestamp_date >= '2012-07-16' AND 
     eventType = 1 AND someOtherField = 'value' 
ORDER BY timestamp DESC 
LIMIT 1; 

目前這種正在太長的方式返回。有沒有辦法改變SQL,讓我們更快地得到我們想要的東西?另外,是否有像這樣的投影策略?

感謝 何塞

+0

你有時間戳字段的索引 – adrianj98

+0

這可能[有趣](http://www.vertica.com/2010/11/23/life-beyond-indices-the-query-benefits-of-storing -sorted-data /) – adrianj98

+0

你對這張表有什麼預測? – Nija

回答

1

從本質上講,你希望你的預測至少一個根據order by子句中的時間戳列進行優化。如果你正確地做出你的預測,這應該是相當快的。

編輯:只是一個澄清的說明。我並不是故意暗示時間戳列應該是order by子句中唯一的字段。另外,正如下面的評論中所提到的,在這種情況下,在數據庫設計器上進行特定於查詢的運行並不是一件壞事。我相信有一個選擇來優化速度。既然你正在做「select *」,輸出應該可以作爲超級和好友的預測。

+0

如果每個timestamp_date有數百萬條記錄,但「someOtheField」條目較少,該怎麼辦?那麼爲「someOtherField」優化投影會更有意義嗎? –

+0

首先,您可以使用Database Designer並指示Designer執行查詢特定的優化。當然,爲了獲得好的結果,需要有表格樣本數據。 – geoffrobinson

+0

取而代之的是,你可以做一些類似於「按其他字段順序排列,時間戳」或類似的內容。重要的部分是,如果您正確地在投影的order by子句中包含該列,則該查詢應該很快。我會建議在你的情況下使用數據庫設計器,但你可以隨時玩和測試。 – geoffrobinson