#postgresql
#postgresql
Вопрос:
Допустим, я делаю что-то вроде этого:
SELECT c."id", ..., SIMILARITY(c."body", $1) as "similarity"
FROM "comments" AS c
WHERE SIMILARITY(c."body", $1) > 0.2
ORDER BY SIMILARITY(c."body", $1) DESC
LIMIT 10
Я выполняю один и тот же SIMILARITY(c."body", $1)
вызов 3 раза, что является самой дорогостоящей частью запроса. Будет ли Postgres выполнять это вычисление 3 раза? Или он заметит, что это уже сделано, и кэширует его?
Ответ №1:
Да, функция может вызываться несколько раз.
Используйте подзапрос, чтобы избежать этого:
SELECT c.id,
similarity
FROM (SELECT id,
SIMILARITY(c."body", $1) AS similariity
FROM comments) AS c
WHERE similarity > 0.2
ORDER BY similarity DESC
LIMIT 10;