假设您有一个表,其中特定的行子集对于读取来说要热得多。就像有一面旗帜is_alive
需要一张people
桌子。或者,如果您实施软/逻辑删除并且您的搜索条件始终包括is_deleted = 0
.
这些字段是否应该包含在这些表的索引中?如果是这样,他们应该更左还是更右?
假设您有类似...的索引
people [ last_name ]
people [ zip_code ]
people [ gender ]
widgets [ category_id ]
widgets [ seller_id ]
你让他们看起来像
people [ last_name, is_alive ]
widgets [ category_id, is_valid ]
或者
people [ is_alive, last_name ]
widgets [ is_valid, category_id ]
布尔值本身具有低基数/显着性,除非它们与其他搜索条件配对。
尽管几乎每次都使用这个字段,但将这个字段添加到每个索引中只是感觉很可疑。也许这本身就是一个“问题”?是否应该将行传送到具有相同架构的不同表?基本上在标志上进行分区。
供应商不可知论者。