我有代码可以生成如下所示的sql语句:
SELECT * FROM items WHERE id IN (X, Y, Z)
其中x,y,z为整数。
在某些情况下,我的数组只有一个整数,导致该整数生成
SELECT * FROM items WHERE id in (X)
理想情况下,该名称应为where id = x
只有1个项目时调用in
而不是=
对性能有影响吗?
答案 0 :(得分:4)
对于一件物品不会有影响。我在具有25000行和大约15列(没有大文本列)的表上进行了测试。
如果我使用这个:
EXPLAIN
SELECT
*
FROM users
WHERE
user_id = 10104
查询计划很简单:
Index Scan using users_pkey on users (cost=0.29..8.30 rows=1 width=147)
Index Cond: (user_id = 10104)
由于user_id是主键,它将使用它。
现在第二个查询:
EXPLAIN
SELECT
*
FROM users
WHERE
user_Id IN(10104)
产生完全相同的查询计划,因为数据库最终知道这些查询是相等的。
我建议您在表上运行相同的查询(使用EXPLAIN
)并自行检查一下,这是因为我不知道表,索引等的结构。
对具有多个选项的查询进行相同的比较,事情会变得很有趣,但是由于您的问题仅涉及一项,因此您可以安然入睡,知道这不会产生影响。
我认为即使有,它也是如此之小,以至您不应该浪费太多时间思考这里的最佳实践。确保您的代码可读性强且编写正确,并且已经朝着正确的方向迈出了一步