如果我在记录中有8个布尔值,并且在对表进行查询时总是使用这8个值,并且表中的数据是静态的(只读),通过索引和获取匹配记录是否更快查询像二进制(1)这样的单字节字段,或者最好有8个单独的位列,所有8位都添加到索引中?
答案 0 :(得分:4)
单个位字段的索引基本上是无用的。有一点可怕的选择性,0或1,并且可能会被优化器忽略。 8位字段上的8个索引将成为优化程序忽略的8个索引。
字节列上的索引仅略微更具选择性,具有256个不同的值。但是如果你正在寻找单独的位模式,比如'是bit 3 on',那么就没有办法将它表示为一个单独的值来寻求,也不能作为一个范围。
结论是,无论您尝试什么,最终都会进行表扫描无论如何。
更好地解释你的问题是什么,而不是你的解决方案,也许我们可以更有效地思考。
答案 1 :(得分:3)
我会选择索引的一个字节选项,或至少一个带有8个值的计算1字节列,因为你需要保持它们与其他工具分开。 (或许两全其美)
作为一个字节,搜索所有8个值的匹配结果的基数比8个单独的索引更容易避免临界点 - 即使这8个索引可以由引擎加入,我怀疑基数可能使查询提示和扫描而不是搜索 - 将不得不运行测试来证明它。
答案 2 :(得分:0)
一个字节的查询工作得更快。在内存中构造要比较的字节会快得多。