Postgresql медленный запрос с лимитом и порядком - PullRequest
0 голосов
/ 16 мая 2018

У меня проблемы с запросом выбора, это простой запрос для выбора самой последней строки в таблице, но планировщик запросов делает что-то странное.

SELECT id FROM plots WHERE fk_id='73a711a5-cb31-545d-b8d6-75c2a0e3ba9d' ORDER BY created_at DESC LIMIT 1


Limit  (cost=0.43..155.97 rows=1 width=24)
  ->  Index Scan Backward using idx_plot_created_at on plots  (cost=0.43..304694.48 rows=1959 width=24)
        Filter: (fk_id = '73a711a5-cb31-545d-b8d6-75c2a0e3ba9d'::uuid)

И это занимает около 2, 8 секунд, чтобы выполнить.Но когда я удаляю order by и limit, он использует индекс в поле fk_id и возвращает 6 результатов за 102 мс.Разве Postgresql не должен просто прочитать 6 результатов, используя индекс fk_id, и упорядочить их по полю созданного?Вместо этого он, похоже, сканирует таблицу, используя индекс в поле, которое используется для предложения ORDER BY, и затем проверяет каждую строку с условием Filter.Почему он это делает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...