我有一个对象(恰好是 C#),其中包含大约 20 个可为空的布尔值的属性。可能会有几百万个这样的对象持久化到 SQL 数据库(目前是 SQL Server 2008 R2,但将来可能需要支持 MySQL)。实例本身相对较大,因为它们包含大约一段文本以及一些其他不相关的属性。
对于给定的对象实例,大多数属性大部分时间都将为空。
当用户搜索此类对象的实例时,他们可能会选择 1-3 个可为空的布尔属性并搜索这 1-3 个属性中至少有一个为非空的实例(OR 搜索)。
我的第一个想法是将对象持久化到一个表中,其中可以为空的 BIT 列表示可为空的布尔属性。但是,此策略将要求每个 BIT 列有一个索引,以避免在搜索时执行表扫描。此外,每个索引不会特别有选择性,因为每个索引只有三个可能的值。
有没有更好的方法来解决这个问题?