В моей базе данных Postgresql есть своего рода таблица грузовиков. Я пишу новые данные каждую минуту. И я хочу получить последний элемент каждой группы по серийному. Но проблема в том, что моя база данных настолько огромна, что выполнение запросов занимает много времени. Теперь у меня 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 |
+-----+-------------+------------+---------------------+