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,有很大的不同吗?

4

1 回答 1

1

好的,最好的是:

SELECT * FROM mytable ORDER BY param_a DESC LIMIT 1

现在就其本身而言,您假设它会表现不佳是正确的。但是,如果您将索引添加到 param_a,那么它实际上可以进行非常快速的索引查找,然后获取您要查找的一条记录。

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

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

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

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

于 2013-05-12T13:05:01.190 回答