我的问题是在您的客户使用大量小字段时构建索引。如何索引宽泛的布尔表
考虑搜索的以下几点: (不能改变它,这就是客户端提供)
SKU zone1 zone2 zone3 zone4 zone5 zone6 zone7 zone8 zone9 zone10 zone11
A123 1 1 1 1 1 1 1 1
B234 1 1 1 1 1 1 1
C345 1 1 1 1 1 1
但它是非常广泛的,而且有很多种类较多不仅仅是区。 用户将寻找与至少一个选定区域相匹配的skus。我打算用(如果用户选中“2区,zone4中,区段6”)来查询这个
select SKU from TABLE1 where (1 IN (zone2,zone4,zone6))
有什么优势,索引与多层次的指数,像这样:
create index zones on table1 (zone1,zone2,zone3,zone4,zone5,zone6,zone7,zone8,zone9,zone10,zone11)
还是会说只有当用户检查zone1时才有用?
感谢, 罗布
布尔型字段上的索引是浪费时间,因为每行只有两个可能的值。另外,如果您按列的精确顺序搜索列内容,这意味着搜索必须先在zone1上,然后再添加zone2,然后添加zone3;否则,您的*多层索引*将仅工作。如果您在zone5中搜索内容而没有1,2,3和4(以此顺序),那么索引将毫无用处。 –
同意@KenWhite。唯一真正的优化方法是重新设计它。也许你可以添加另一个设计得更好的表,并使用一个触发器来保持它与此表同步。 – Barmar
很遗憾,你不能重新设计它,因为用一个更加规范化的表格,你有一个'sku'和'zones'的列,在那里你可以有多行sku(一个用于每个区域),然后这将允许一个有用的指数。对于宽行来说,除了定位SKU之外,索引不会有任何好处;其余的根本无法进行优化。 –