我正在通过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,那会有很大的不同吗?
答案 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;
所以请记住这一点。这可以通过智能索引而不是聪明的查询来解决。