1

我的 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。)我不仅需要索引很多字段,而且这不会否定索引的优势吗?

4

1 回答 1

1

一个好的优化器应该为这两个选项产生大致相同的速度。我会选择更符合逻辑的解决方案:如果您的程序使用类型 0 到 6,那么将数字 0 到 6 存储在数据库中会更好。

您也可以使用IN运算符使查询更具可读性:

SELECT * FROM table WHERE type IN (0, 3, 4)
于 2014-11-30T23:34:56.947 回答