van*_*goz 5 database database-design
假设我有一个数据库表,我想根据布尔属性(例如“标记”属性)进行过滤。是只向表添加“标记”属性更好,还是创建一个具有基表外键的新表?优缺点都有什么?
如果这就是您所需要的1 ,那么只需添加简单字段即可。
但是,您必须小心如何为其建立索引。除非这些值严重倾斜2,否则您最终会得到一个具有可怕选择性和集群因子3 的索引,并且实际上最好进行全表扫描4。
如果您按标志与其他字段结合进行过滤,则创建一个复合索引,这样就有更好的机会进行适当的选择。
1即,您不需要以某种方式“描述”或“增强”两个可能的布尔值中的每一个的附加数据。
2一个值属于极少数(包含 的行数false远小于包含 的行数true,反之亦然),并且您恰好只过滤该值。
3该链接适用于 Oracle,但一般原则适用于所有 DBMS。
4即使存在索引,一个像样的 DBMS 也会自动为您完成这些工作。假设的“愚蠢”DBMS 会盲目地使用索引,并且性能甚至比全表扫描还要差。