Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找与最新条目对应的数据_Python_Postgresql_Psycopg2_Postgresql 9.2 - Fatal编程技术网

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

Python 查找与最新条目对应的数据,python,postgresql,psycopg2,postgresql-9.2,Python,Postgresql,Psycopg2,Postgresql 9.2,我正在通过psycopg2处理数据库,我想在数据库中找到“最新”的条目。 似乎我不需要做任何排序来获得这个,因为我实际上只想要最新的。数据如下所示: id | x | y | param_a | param_b | param_c -------+-----+-----+----------------------------+-------------------------+------------------------

我正在通过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个最新的,有很大的区别吗?

好的,最好的是:

SELECT * FROM mytable ORDER BY param_a DESC LIMIT 1
现在,就其本身而言,你认为这将表现不佳是正确的。但是,如果您向param_a添加一个索引,那么它实际上可以进行非常快速的索引查找,然后获取您正在查找的一条记录

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

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

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

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