我有两种类型的查询
- ID IN ('123456',1234456)
- ID IN ('123456','1234456')
奇怪的问题是当我使用 mysql 解释查询时,第一个查询没有使用 ID 上的索引,而第二个查询使用的是索引。
我真的很困惑为什么?
ID 是唯一键 (int)
切勿在 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
IN
如果列表包含不同数据类型的混合,MySQL 显然无法使用索引。在你的情况下,你混合字符串和整数。