У меня есть идентичные таблицы в Postgres9 и Postgres10, за исключением того, что таблица Postgres10 разделена по состоянию.В обеих таблицах содержится около 80 миллионов записей
Когда я делаю такой запрос, в секционированной таблице он примерно в 10 раз быстрее, чем в неразделенной таблице Postgres9.ура!
# This is fast with a partition, and slow without
parcels = Parcel.objects.filter(state='15', boundary__intersects=polygon)
Однако, когда я пытаюсь сделать обновление через Django, оно примерно в 1000 раз медленнее на многораздельной таблице (это занимает около 2 минут), чем на Postgres9версия:
for parcel in parcels:
do something
# This is slow with a partition, and fast without
parcel.save()
Но когда я делаю обновление напрямую через psql, оно работает очень быстро на секционированной таблице в Postgres10 и довольно медленно на нераспределенной таблице в Postgres9:
# This is fast with a partition, and slow without
UPDATE parcel SET field=42 WHERE state='15' AND parcel_id='someid';
Почему мой вызов save
в Django будет намного медленнее, чем обновление напрямую через psql?Есть ли эквивалент QuerySet.explain()
для save
операций?