我的tinyint字段有6个可能的选项,每次搜索用户都会选择可接受的选项。目前,我只是将每个选项存储为0到6的值,并在WHERE中为每个可接受的选项执行单独的子句。 示例(用户选择的选项0,3和4):
SELECT * FROM table WHERE type = 0 OR type = 3 OR type = 4
我想知道如果将数据存储为1,2,4,8,16和32,并且我执行按位搜索会更快。
SELECT * FROM table WHERE type & 25
我相信第一个选项通常可以被索引然后更快,但是这个表实际上是43个字段,其中33个是可搜索的,包括各种操作。 (查询通常在完成时有一个批次的AND。)我不仅需要索引很多字段,而且还不能否定索引的优势吗? / p>
答案 0 :(得分:1)
一个好的优化器应该为这两个选项产生大致相同的速度。我会选择更好地匹配逻辑的解决方案:如果你的程序使用类型0到6,那么在数据库中存储数字0到6会更好。
您也可以使用IN
运算符使您的查询更具可读性:
SELECT * FROM table WHERE type IN (0, 3, 4)