2012-12-04 92 views
1

我有一個網絡日誌列表。每行都有一個時間戳記,我需要拉出不同的時間戳,以便我可以將這些時間戳用於以後的查詢。目前我使用下面的查詢:加速選擇不同的PostGreSQL查詢

select distinct time from metastatus 

現在我首先要確認select distinct查詢返回的值進行排序?

其次,我已經創建了一個數據庫用於上述查詢的時間索引。

最後,我確實考慮過檢索所有的時間,然後通過我的代碼找到唯一的值,但是對於我來說,檢索所有時間(160,000,000)的價值太大。

謝謝, 詹姆斯

+0

我目前運行的查詢通過時間指數使用timeindex' –

+1

SELECT DISTINCT不保證排序的值集羣數據庫即'集羣metastatus,您可以通過在年底需要一個訂單。優化器可能會決定對這些值進行排序以產生不同的列表,但這不是它唯一的方法。 – Laurence

+0

謝謝你,我有'order by',但我刪除它,因爲我看到它返回了有序值,並且假設它每次都這樣做。我會放回去。 –

回答

1

通常的方法來獲得所用的PostgreSQL是對行進行排序DISTINCT值,則選擇第一個每組。這就是爲什麼你通常得到一個排序結果,但Postgres沒有聲明任何關於訂單。只需添加符合DISTINCT條款的ORDER BY即可。無論如何,從文檔的角度來看,情況會更好。通常不會花費額外的東西。請與EXPLAIN ANALYZE確認。

的想法檢索所有行和排序之外的Postgres是無稽之談。這個機會甚至沒有機會接近RBDMS的性能,而RBDMS只是針對這樣的任務而優化的。你也會在電線上傳輸相當多的噪音。考慮這個related question下的答案。

+0

我知道一個SQL查詢的性能可能比我爲排序行所寫的任何代碼都要好。無論如何,我並沒有通過我的代碼來做這件事,因爲行數太多,而且你說它可能會變慢。我只是試着用兩種方法比較時間,這是我提到它的唯一原因,但這是不可能的。 –

+0

這是個不好的建議。大表上的'order by'可能比'select distinct'查詢的性能更差。 – Cerin