在MySQL中,“ WHERE my_bool_col = 1”和“ WHERE my_bool_col”之间有什么区别

时间:2019-03-15 05:06:56

标签: mysql

我今天遇到了一个查询,该查询在两列上使用where条件。这是查询的示例:

select * from users where age = 21 and consent_given = 1;

我有一个年龄指数和一个同意度指数。在此查询上运行explain时,它使用这两个索引的index_merge。

重复问题的注意事项:仅当有足够的用户满足这些条件时,才会发生此索引合并;我使用的表格大约有250万行,其中3500条符合条件。

我发现,如果仅使用age_index并且不合并使用consent_given_index,则该查询的运行速度也更快。

我已经想出了几种优化此查询的方法(创建复合索引,提示使用年龄索引,删除接受同意的索引等等),但是我真正感到困惑的是-为什么下面的查询没有使用同意书给定的索引,并且仅使用年龄索引,因此优化了查询?

select * from users where age = 21 and consent_given;

consent_given是否应该做与consent_given = 1完全相同的事情?当我在此上运行explain时,employee_given_index甚至都没有列在可能的键下-mysql认为它不是可用的索引。谁能解释在MySQL中相对于索引而言,在指定=1与未指定之间的区别?

提前谢谢!

更新

第一个查询的输出说明:

id            => 1
select_type   => SIMPLE
table         => users
type          => index_merge
possible_keys => users_age_index, users_consent_given_index
key           => users_age_index, users_consent_given_index
key_len       => 767,1
ref           => NULL
rows          => 1,886
extra         => Using intersect(users_age_index,users_consent_given_index); Using where

第二个查询的输出说明:

id            => 1
select_type   => SIMPLE
table         => users
type          => ref
possible_keys => users_age_index
key           => users_age_index
key_len       => 767
ref           => const
rows          => 3,774
extra         => Using index condition; Using where

0 个答案:

没有答案