Пожалуйста, проверьте, является ли конфигурация одинаковой на обоих серверах и что все индексы присутствуют и не помечены как «недействительные».
Предполагается, что в этом случае разница может заключаться в том, что данные распределяются по-разному.в обеих базах данных.Пожалуйста, ANALYZE surveys_surveyrequest
и выполните следующее для обеих баз данных:
SELECT correlation
FROM pg_stats
WHERE tablename = 'surveys_surveyrequest'
AND attname = 'created';
Я предполагаю, что значение близко к 1 или -1 на A и близко к 0 на B.
Это объясняет , почему PostgreSQL предпочитает сканирование индекса на A. Проблема с планом A заключается в том, что PostgreSQL должен сканировать намного больше строк индекса, чем предполагалось, вероятно, потому что все строки, соответствующие условию, находятся далеко назадиндекс.
Я бы сказал, что вы должны просто отключить сканирование индекса на surveys_sur_created_099976_idx
, либо с помощью
DROP INDEX surveys_sur_created_099976_idx;
, либо (если вам нужен индекс для других целей) с помощью
ORDER BY U0."created" + INTERVAL '0 seconds'