查找与最新条目对应的数据

时间:2013-04-01 03:06:43

标签: python postgresql psycopg2 postgresql-9.2

我正在通过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 个答案:

答案 0 :(得分:1)

好的最好是:

SELECT * FROM mytable ORDER BY param_a DESC LIMIT 1

现在你自己也是正确的,假设它表现不佳。但是,如果您向param_a添加索引,那么它实际上可以执行非常快速的索引查找,然后获取您要查找的一条记录。

因此,PostgreSQL上的关键问题不是调优查询,而是调整数据库以使查询快速运行。简单的索引可以创造奇迹。

有趣的是,如果可用,以下内容会对PostgreSQL执行两次索引扫描查找(并且表格足够大,且数据选择性足够):

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

所以请记住这一点。这可以通过智能索引而不是聪明的查询来解决。