2013-04-01 51 views
0

我正在通過psycopg2處理數據庫,並且我想在數據庫中找到'最新'條目。 似乎我不應該做任何排序來獲得這個,因爲我簡直就是想要最新的。數據看起來像這樣:查找對應最新條目的數據

id | x | y |    param_a  |  param_b | param_c 
-------+-----+-----+----------------------------+-------------------------+---------------------------+------------+----------------+------------- 
    1 | 324 | 229 | 2013-03-27 22:41:39.052966 |  75.000 | 82.000 
    2 | 317 | 232 | 2013-03-27 22:41:39.185109 |  70.000 | 86.000 
    3 | 278 | 364 | 2013-03-27 22:41:39.203416 |  68.000 | 75.000 

假設#3是最新的(它在這個數據集中)。我希望發現,如果不通過整個數據庫進行排序,數據集會隨着時間的推移而變得非常大,因爲數據通過串行端口很快流入。

我需要用下面的示例代碼?:

conn = psycopg2.connect(database = POSTGRESQL_DATABASE, host = POSTGRESQL_SERVER, user = POSTGRESQL_USERNAME, password = POSTGRESQL_PASSWORD) 
cur = conn.cursor() 
cur.execute("") #need help here 

而且什麼類型的查詢,如果我想找到N個最新的,是存在巨大的差異?

回答

1

好,最好是:

SELECT * FROM mytable ORDER BY param_a DESC LIMIT 1 

現在本身你是正確的假設,是要表現不佳。但是,如果向param_a添加索引,那麼它實際上可以做一個非常快速的索引查找,然後抓取您正在查找的一條記錄。

因此,您在PostgreSQL上的關鍵問題不是調整查詢,而是調整數據庫以使查詢快速運行。簡單的索引創造奇蹟。

有趣的是,下面執行兩個索引掃描查找PostgreSQL上如果有(和表是夠大,夠選擇性數據):

SELECT min(param_a), max(param_a) from mytable; 

所以記住這一點。這是通過智能索引而不是聰明的查詢來解決的。