sql查询:IN与相等

时间:2018-08-31 02:40:58

标签: sql postgresql

我有代码可以生成如下所示的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而不是=对性能有影响吗?

1 个答案:

答案 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)并自行检查一下,这是因为我不知道表,索引等的结构。

对具有多个选项的查询进行相同的比较,事情会变得很有趣,但是由于您的问题仅涉及一项,因此您可以安然入睡,知道这不会产生影响。

我认为即使有,它也是如此之小,以至您不应该浪费太多时间思考这里的最佳实践。确保您的代码可读性强且编写正确,并且已经朝着正确的方向迈出了一步