Postgresql 性能更好的多个联接或多个选择

Postgresql 性能更好的多个联接或多个选择,postgresql,Postgresql,下面的图片显示了我的模式 在我的JavaJDBC应用程序中,我需要从T1表中选择一些行。为此,我使用where、limit和offset子句。对于每个选定的行,我选择T2中的行和T3中的行。 我认为两个可能性是: 使用Java进行多个查询 select * form T1 where whereField=5 order by whereField limit 5 offset 5 //in java, for each selected row from T1: select * from

下面的图片显示了我的模式

在我的JavaJDBC应用程序中,我需要从T1表中选择一些行。为此,我使用where、limit和offset子句。对于每个选定的行,我选择T2中的行和T3中的行。 我认为两个可能性是:

  • 使用Java进行多个查询

    select * form T1 where whereField=5 order by whereField limit 5 offset 5
    //in java, for each selected row from T1:
    select * from T2 where id=?
    select * from T3 where id=?
    
  • 对数据库的一个查询:

    select * from T1 join T2 on T1.t2=T2.id join T3 on T2.t3=T3.id 
    where T1.whereField=5 order by T1.whereField limit 5 offset 5;
    

  • 我想知道哪种方法更有效。也许有更好的方法?

    确定哪种方法更适合您的数据库的最好方法几乎肯定是使用Postgresql。这是一套幻灯片,是一个很好的演示


    性能将取决于表中的数据(有多少行具有给定的键)、索引的位置等。使用EXPLAIN将帮助您了解数据库在做什么,有多少行受到影响,并让您了解如何提高性能(Postgres配置、索引、运算符类等).

    3选择并通过java连接很可能比一个选择慢,所有连接都在db中进行!SQL数据库针对这类工作进行了优化

    类似问题:


    理想情况下,一条SQL语句是最好的。这只需要一次数据库访问和一次数据返回。假设在三个表上有适当的索引,我看不出三个表连接会对任何关系数据库造成问题。如果您向我展示了100个表联接,那么情况可能会发生变化,多个查询将是更好的方法

    最佳答案: 这取决于你的设置,在你的设置下测试这两种方法,看看哪一种能产生最好的结果,然后按照它去做