我使用的是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
如果一个人更快,是否总是更快,即没有盈亏平衡点?
答案 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个查询快,但使用BETWEEN
或IN
运算符的效果要比两者都好。