LINUX.ORG.RU

История изменений

Исправление borisych, (текущая версия) :

  1. нужно привести планы по крайней мере от explain (analyze), а еще лучше от explain( analyze, buffers)
  2. запрос сам по себе какой-то бессмысленный и есть сомнение, что это реальный запрос: оно посредством INNER JOIN умножает Documents на Search, а выбирает только из Documents, что несколько странно - там же в результате гора дублей вываливается, наверняка же вместо INNER JOIN нужен либо IN / EXISTS либо LATERAL с LIMIT 1, что суть одно и то же, но PostgreSQL может разные планы строить при этом
  3. «начинает использовать Incremental Sort, достает только 40 записей уже отсортированных и план становится намного лучше» - это заблуждение, оно просто начинает использовать совсем неподходящий индекс (подозреваю это ON Documents(FullName)) и из-за перекосов в БД и паразитного умножения как-то ухитряется довольно быстро набрать 40 строк
  4. с большой долей вероятности здесь запрос с LOOSE SCAN нужен

Исходная версия borisych, :

  1. нужно привести планы по крайней мере от explain (analyze), а еще лучше от explain( analyze, buffers)
  2. запрос сам по себе какой-то бессмысленный и есть сомнение, что это реальный запрос: оно посредством INNER JOIN умножает Documents на Search, а выбирает только из Documents, что несколько странно - там же в результате гора дублей вываливается, наверняка же вместо INNER JOIN нужен либо IN / EXISTS либо LATERAL с LIMIT 1, что суть одно и то же, но PostgreSQL может разные планы строить при этом
  3. «начинает использовать Incremental Sort, достает только 40 записей уже отсортированных и план становится намного лучше» - это заблуждение, оно просто начинает использовать совсем неподходящий индекс (подозреваю это ON Documents(FullName)) и из-за перекосов в БД и паразитного умножения как-то ухитряется довольно быстро набрать 40 строк