django - 如何进行查询以获取 Django ORM 中每个组的最后一个元素?
问题描述
我的 Postgresql 数据库中有一个 Truck 表。我每分钟写一个新数据。我想按序列获取每组的最新元素。但问题是我的数据库太大了,查询需要很长时间。现在我有 470000 行数据。我尝试进行查询:
rec_ = Trucks.objects.filter(serial='tsr1801').distinct('serial').order_by('serial', '-id')
它的反应这么慢。我尝试了如下所示的其他方法,但这些查询也运行缓慢。
1) https://stackoverflow.com/a/19930802/7456750
矿:Trucks.objects.annotate(max_id=Max('id')).filter(id=F('max_id'))
2) https://stackoverflow.com/a/17887296/7456750
矿:Trucks.objects.values('serial', 'payload', 'datetime').annotate(id=Max('id'))
有什么方法可以获取每个组的最新元素,效果很快吗?
+-----+-------------+------------+---------------------+
| Id | Serial | Payload | Datetime |
+-----+-------------+------------+---------------------+
| 1 | tsr1801 | 24432 | 2018-11-01 12:00:00 |
+-----+-------------+------------+---------------------+
| 2 | tsr1802 | 20234 | 2018-11-01 12:01:00 |
+-----+-------------+------------+---------------------+
| 3 | tsr1802 | 21234 | 2018-11-01 12:01:00 |
+-----+-------------+------------+---------------------+
| 4 | tsr1801 | 24332 | 2018-11-01 12:02:00 |
+-----+-------------+------------+---------------------+
| 5 | tsr1801 | 21532 | 2018-11-01 12:03:00 |
+-----+-------------+------------+---------------------+
| 6 | tsr1802 | 19234 | 2018-11-01 12:02:00 |
+-----+-------------+------------+---------------------+
| 7 | tsr1801 | 18040 | 2018-11-01 12:04:00 |
+-----+-------------+------------+---------------------+
| 9 | tsr1801 | 27452 | 2018-11-01 12:05:00 |
+-----+-------------+------------+---------------------+
解决方案
推荐阅读
- esp8266 - 上传文件系统到 ESP-WROOM-02
- java - 使用 Firebase 自动生成的密钥返回帖子特定数据
- php - WooCommerce 操作挂钩以重定向到订单上的新页面失败
- plugins - 在 Matomo 中跟踪我自己的动作维度的数据(没有自定义维度插件)
- django - 我打算将保存的数据渲染到 html 表中,但发现了这个错误
- angular - 简化与 ngModel 的迭代器中的表达式
- visual-studio-code - 使用 Visual Studio Code 打印完整的数组项
- nginx - Nginx - 服务器静态文件
- python - 在 Ubuntu 16.04 上找不到 django==3.0 的匹配发行版
- html - 在 flexLayout 中使 div 尽可能大