Почему небольшое изменение в поисковом запросе так сильно замедляет запрос?

У меня есть следующий запрос в PostgreSQL (9.5.1):

select e.id, (select count(id) from imgitem ii where ii.tabid = e.id and ii.tab = 'esp') as imgs,
 e.ano, e.mes, e.dia, cast(cast(e.ano as varchar(4))||'-'||right('0'||cast(e.mes as varchar(2)),2)||'-'|| right('0'||cast(e.dia as varchar(2)),2) as varchar(10)) as data,
 pl.pltag, e.inpa, e.det, d.ano anodet, coalesce(p.abrev,'')||' ('||coalesce(p.prenome,'')||')' determinador, d.tax, coalesce(v.val,v.valf)||' '||vu.unit as altura,
 coalesce(v1.val,v1.valf)||' '||vu1.unit as DAP, d.fam, tf.nome família, d.gen, tg.nome gênero, d.sp, ts.nome espécie, d.inf, e.loc, l.nome localidade, e.lat, e.lon
from esp e
left join det d on e.det = d.id
left join tax tf on d.fam = tf.oldfam
left join tax tg on d.gen = tg.oldgen
left join tax ts on d.sp = ts.oldsp
left join tax ti on d.inf = ti.oldinf
left join loc l on e.loc = l.id
left join pess p on p.id = d.detby
left join var v on v.esp = e.id and v.key = 265
left join varunit vu on vu.id = v.unit
left join var v1 on v1.esp = e.id and v1.key = 264
left join varunit vu1 on vu1.id = v1.unit
left join pl on pl.id = e.pl
WHERE unaccent(TEXT(coalesce(p.abrev,'')||' ('||coalesce(p.prenome,'')||')')) ilike unaccent('%vicen%')

Требуется 430 мс, чтобы получить 1129 строк из общего количества 9250 вesp Таблица.

Если я изменю условие поиска с%vicen% в%vicent% (добавляя 't'), для получения тех же 1129 строк требуется 431 мс.

Упорядочив по столбцу поиска, по возрастанию и по убыванию, я вижу, что все 1129 строк имеют одинаковое имя в обоих случаях.

Теперь странно: если я изменю поисковый запрос с%vicent% в%vicenti% (добавив «я»), теперь это занимает невероятно24,4 секунды чтобы получить те же 1129 строк!

Искомый термин всегда в первомcoalesceт.е.coalesce(p.abrev,''), Я ожидаю, что запрос будет выполняться медленнее или быстрее, в зависимости от размера искомой строки, но не намного !! Кто-нибудь имеет представление о том, что происходит?

РезультатыEXPLAIN ANALYZE (здесь будет превышено ограничение в 30 тыс. символов):

За%vicen%: http://explain.depesz.com/s/2XF

За%vicenti%: http://explain.depesz.com/s/dEc6

Ответы на вопрос(2)

Ваш ответ на вопрос