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