mysql的奇怪行为

时间:2014-01-14 17:21:42

标签: mysql mysql-5.5

我有两种类型的查询

  1. ID IN('123456',1234456)
  2. ID IN('123456','1234456')
  3. 奇怪的问题是,当我使用mysql解释查询时,第一个查询不使用ID上的索引,而第二个查询使用索引。

    我真的很困惑为什么?

    ID是唯一键(int)

2 个答案:

答案 0 :(得分:4)

您不应该在IN列表中混合引用和不引用的值,因为引用值(例如字符串)和不带引号的值(例如数字)的比较规则不同。因此,混合类型可能会导致结果不一致。

例如,不要像这样写一个IN表达式:

SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');

相反,请这样写:

SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');

参考:http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in

答案 1 :(得分:3)

如果IN列表包含不同数据类型的混合,MySQL显然无法使用索引。在您的情况下,您混合字符串和整数。