0

我有两种类型的查询

  1. ID IN ('123456',1234456)
  2. ID IN ('123456','1234456')

奇怪的问题是当我使用 mysql 解释查询时,第一个查询没有使用 ID 上的索引,而第二个查询使用的是索引。

我真的很困惑为什么?

ID 是唯一键 (int)

4

2 回答 2

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

于 2014-01-14T17:30:48.360 回答
3

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

于 2014-01-14T17:25:39.563 回答