我运行一个使用 PostgreSQL 9.1 作为后端的食谱网站。当用户搜索食谱时,我会根据用户想要查找的内容即时构建查询。例如,如果用户想要查找烹饪时间低于 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% 的食谱不会被隐藏。我想知道这种技术是否是从所有查询中排除某些食谱的最佳、最快的方法。我知道绝对最快的方法是为隐藏的食谱创建一个单独的表,但是这将是大量的重构,所以我想避免这种情况。