gpt4 book ai didi

sql - PostgreSQL - 在所有表搜索中排除一组特定行的绝对最快的方法是什么

转载 作者:行者123 更新时间:2023-11-29 11:46:02 26 4
gpt4 key购买 nike

我运行一个使用 PostgreSQL 9.1 作为后端的食谱网站。当用户搜索食谱时,我会根据用户想要查找的内容即时构建查询。例如,如果用户想要查找 cooking 时间少于 30 分钟的所有食谱,我将生成查询:

SELECT * From Recipes WHERE CookTime < 30;

我现在需要“隐藏”某些食谱,这意味着它们永远不会出现在任何搜索中。访问它们的唯一方法是直接知道 URL。为此,我在 Recipes 表中添加了一个新列:

ALTER TABLE Recipes ADD COLUMN Hidden boolean not null default false;
CREATE INDEX IDX_Recipes_Hidden ON Recipes(Hidden);

我的想法是将短语“NOT HIDDEN”硬编码到每个 WHERE 子句中。例如,上面的查询现在是:

select * from recipes where not Hidden and CookTime < 30;

我的问题:

根据查询分析器,这将生成一个位图来组合两个索引。请记住,99% 的食谱不会被隐藏。我想知道这种技术是否是从所有查询中排除某些食谱的最好、最快的方法。我知道绝对最快的方法是为隐藏的食谱创建一个单独的表,但是这将是大量的重构,所以我想避免这种情况。

最佳答案

您有任何性能问题吗?如果您的解决方案没有问题,那么将更多时间浪费在不需要更改的事情上是没有意义的。

位图索引适用于没有太多不同值的内容。因此,在您只有 true 和 false 的情况下,这很好。

您可以只构建类似物化 View 的东西,但这似乎需要很多工作,而且创建第二个表可能更容易,但如果您没有任何问题,请不要更改任何内容。

postgres 中的 MV:http://tech.jonathangardner.net/wiki/PostgreSQL/Materialized_Views

关于sql - PostgreSQL - 在所有表搜索中排除一组特定行的绝对最快的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10221350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com