联接或多个sql查询

b1zrtrql  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(301)

我想知道什么是检索数据最有效的方法(对数据库来说是快速和较少的工作)。我有两张table:
用户

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

数据

USER_ID | DATA
2       | some_data_1
3       | some_data_2

我需要通过用户名获取值,据我所知,我有两个选择: select id from users where name ='some_name' 然后从 data 按id列出的表。
select id from users join data on users.id = data.user_id where user.name = 'some_name' 另外,我想需要注意的是:这些是具有数千行和很少更多列的实际表的示例,上面有一个索引 user_id 中的列 data 表中,我在下面使用jdbc驱动程序,这是一个网络调用,如果重要的话是postgresql。
升级。此外,任何研究或任何类型的论文/文件/演讲的链接都非常有趣

2admgd59

2admgd591#

通常,您希望让数据库做尽可能多的工作。一般来说,数据库运行在更复杂的服务器上,已经有无数的人年致力于优化程序和使代码有效运行。
此外,发送到数据库的每个查询都有开销。在运行查询之前,需要对其进行分析和编译。每个查询也有来回的通信。因此,一个查询通常比两个好。
对您的问题的一般答案是使用一个查询,即 join .
在某些情况下,多个查询比一个查询具有更好的性能。但在您的情况下,您只需要查找一行或几行。数据库设计得很好 join . 所以,使用单个查询。

fv2wmkja

fv2wmkja2#

连接是更好的选择,因为它将在一个镜头给你的数据。
如果您的应用程序正在调用这两个查询,那么这将浪费两次资源(您的应用程序的资源、网络时间、db解析和其他内容),使用一个查询可以很容易地避免这种浪费。资源只能使用一次。
因此,最好使用一个查询而不是两个查询来实现相同的目的。
与…同行 JOIN :

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

相关问题