postgresql - 如果我在查询中多次使用它,Postgres 会缓存 SIMILARITY(或任何昂贵的函数调用)结果吗?
问题描述
假设我做了这样的事情:
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
我进行了 3 次完全相同的SIMILARITY(c."body", $1)
调用,这是查询中最昂贵的部分。Postgres 会执行 3 次计算吗?还是它会注意到它已经完成并缓存它?
解决方案
是的,该函数可以被多次调用。
使用子查询来避免这种情况:
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;
推荐阅读
- php - PHP conditional regex
- terraform - 如何实现 terraform 嵌套循环构造?
- sympy - 为什么 SymPy 不取代指数?
- javascript - 文件上传开始/完成时显示/隐藏微调器
- django - 进行迁移时“无法导入名称视图”(Django,Python 3.6)
- sql-server - SQL Server UPDATE 触发器 - 破坏事物
- ios - Cocoapod 中的命名颜色
- json - 新的 Promise 输出返回单词“Promise { }”
- dart - FireStore 和颤振
- python - 使用 NLTK 创建一个新的语料库,忽略输入文件中的某些字符串并且不将它们输入到语料库中