MySQL - IN()函数是否需要完整的TABLE扫描?

时间:2011-03-10 06:28:28

标签: php mysql

嘿伙计们,我正在做一个需要大量查询的社交网站。我正在使用1个具有IN()函数的查询。我想知道这是否需要完整的数据库扫描。我不确定是否有任何其他方法可以得到相同的结果。

示例表:

ID | NAME | AGE
05 | Quinton | 25
22 | Stevey | 33
78 | Rebecca | 22
90 | Michael | 26

Query: "SELECT * FROM users WHERE id IN(05,78) ORDER BY id DESC LIMIT 0,2"

这是获取阵列中用户列表的最有效方法吗? (使用PHP)

4 个答案:

答案 0 :(得分:4)

通常IN不需要表扫描。如果在id列上有索引,MySQL将能够使用该索引。但是当表中只有4行时,执行表扫描通常最快,因此在测试少量数据时,您可能会发现在插入更多数据之前索引没有被使用。

答案 1 :(得分:2)

如果您在ID字段上有索引,则不应要求进行数据库扫描。我假设ID字段是主键,这意味着它默认为索引。

答案 2 :(得分:2)

您可以检查其他WHERE语句是否会加快速度。从右到左对它们进行评估时,对最低/最高id的限制可能是有益的,例如

SELECT * FROM users WHERE id in(13,18,3456) AND id >= 13 AND id <= 3456

(假设列id被索引)

答案 3 :(得分:0)

首先,Query中存在错误,应该是

"SELECT * FROM users WHERE id IN(05,78) ORDER BY id DESC LIMIT 0,2"

第二件事,当你使用limit 0,2时,为什么你要扫描一张完整的表,你可以像这样搜索

WHERE id=05 OR id=78 ORDER BY RAND () LIMIT 2