我有两种类型的查询
奇怪的问题是,当我使用mysql解释查询时,第一个查询不使用ID上的索引,而第二个查询使用索引。
我真的很困惑为什么?
ID是唯一键(int)
答案 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显然无法使用索引。在您的情况下,您混合字符串和整数。