什么是更快:30个单独的查询,或30 OR条件?

时间:2018-01-24 08:03:14

标签: mysql

我使用的是mysql数据库,需要从一个表中检索密钥,以便从另一个表中获取相应的数据。

作为一个例子:我有一个朋友桌,所有人X的朋友都列出了他们的唯一密钥。另外,我有一个用户表,其中存储了所有用户信息。 现在我想查询用户表中属于人X的30个朋友的所有信息。 那么最快的是: 使用以下查询为每个朋友执行30次迭代循环

SELECT name, age, location FROM users WHERE id=X

或执行以下查询

SELECT name, age, location FROM users WHERE id=1 OR id=2 OR .... OR id=30 

如果一个人更快,是否总是更快,即没有盈亏平衡点?

2 个答案:

答案 0 :(得分:4)

您必须使用in

SELECT name, age, location FROM users WHERE id in(1, 2, 30)

一个SQL查询,其中N行将比具有一行的N个查询更快

答案 1 :(得分:3)

您可以使用BETWEEN

SELECT name, age, location FROM users WHERE id BETWEEN 1 AND 30

请注意,BETWEEN包含在内,并且包含ID为1和30的项目。

另一个解决方案是使用多条件

SELECT name, age, location FROM users  WHERE id >= 1 AND id <= 30

此外,另一种解决方案是使用IN,但您应记下所有范围

SELECT name, age, location FROM users WHERE id IN (1,2,3,4,5,6,7,8,...,30)

<强>更新  在您更新问题后,通常一个在索引字段上有30个条件的查询比30个查询快,但使用BETWEENIN运算符的效果要比两者都好。