嘿伙计们,我正在做一个需要大量查询的社交网站。我正在使用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)
答案 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