Комментарии 2
Вот я с кладываю ваши цифры: на рабочем корпусе тикетов ноль рёбер similar_to, значит идёт - полный поиск (brute по вашему); граф соседей вы специально не строите; горячий путь спасли кэшем пула. Получается, в проде ваш HNSW сегодня не работает. И что он вам дал, кроме двух починенных Seq Scan, и не правильнее ли сказать, что ANN пока лежит на полке?
В проде работает brute — да, и не только из-за ненастроенного графа. В коде стоит порог bruteThreshold = 2000: ниже него мы вообще не идём в спуск, потому что точный перебор дешевле и точнее. Личный корпус — 249 узлов (ниже порога), тикетный — 5609, но с нулём рёбер similar_to (граф не построен). Итого ANN не активен ни там, ни там. Что он дал нам: (а) масштабный запас — на построенном графе он включится сам, без миграций; (б) две починки, которые оказались нужны в любом случае — Seq Scan на входе и MATERIALIZED-CTE в обходе; (в) понимание, что дорога не арифметика, а транспорт, — а это уже определило архитектуру кэша. ANN пока страховка, не рабочая лошадь, согласен.

Строили ANN руками — когда это того стоило, а когда нет