【问题标题】:Join or multiple sql queries加入或多个sql查询
【发布时间】:2020-07-09 11:33:30
【问题描述】:

我想知道检索数据的最有效(快速且数据库工作量少)的方法是什么。 我有 2 张桌子:

用户

ID | NAME 
1  | John
2  | Mike
3  | Jack

数据

USER_ID | DATA
2       | some_data_1
3       | some_data_2

我需要通过用户名获取价值,据我所知,我有两个选择:

  1. select id from users where name ='some_name',然后按 id 从data 表中选择。

  1. select id from users join data on users.id = data.user_id where user.name = 'some_name'

另外,我想重要的是要注意:这些是具有数千行和更多列的真实表的示例,data 表中的user_id 列上有一个索引,我正在使用 jdbc 驱动程序和这是一个网络调用,如果重要的话,它是 postgreSQL。

更新。此外,任何指向研究的链接或任何类型的论文/文档/演讲都会非常有趣

【问题讨论】:

    标签: sql postgresql performance


    【解决方案1】:

    一般来说,您希望让数据库做尽可能多的工作。一般来说,数据库在更复杂的服务器上运行,并且已经有数以亿计的人年致力于优化器和使代码有效运行。

    此外,您发送到数据库的每个查询都会产生开销。查询需要在运行之前进行解析和编译。每个查询也有来回通信。因此,一个查询通常优于两个。

    您问题的通用答案是使用单个查询,即带有join 的查询。

    在某些情况下,多个查询比一个查询具有更好的性能。但在您的情况下,您只寻找一行或几行。该数据库是为join 精心设计的。因此,请使用单个查询。

    【讨论】:

      【解决方案2】:

      加入是更好的选择,因为它可以一次性为您提供数据。

      如果您的应用程序调用这两个查询,那么这将浪费两次资源(您的应用程序的资源、网络时间、数据库解析和其他内容),使用单个查询可以轻松避免。资源只会被使用一次。

      所以最好使用一个查询而不是两个查询来达到相同的目的。

      JOIN一起去:

      select id 
        from users 
        join data on users.id = data.user_id 
       where user.name = 'some_name' 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 2013-08-06
        • 2021-08-30
        • 1970-01-01
        相关资源
        最近更新 更多