两个SELECT和SELECT加JOIN的性能差异

时间:2013-09-06 19:56:10

标签: sql database jdbc rdbms

我在网上搜索了一下如何将JDBC调用传输到数据库管理系统。我想知道的是,即使数据库是本地的,JDBC调用是否会产生网络流量以便与DBMS通信?

我需要争论为什么两个单独的SQL SELECT语句比具有JOIN的单个语句更昂贵。

2 个答案:

答案 0 :(得分:2)

简单的答案是使用JDBC驱动程序。

enter image description here

  

驱动程序依赖于平台,因为它依次使用ODBC   依赖于底层操作系统JVM的本机库   正在奔跑。此外,使用此驱动程序会导致其他安装   依赖;例如,必须在计算机上安装ODBC   拥有驱动程序和数据库必须支持ODBC驱动程序。该   如果替代纯Java,则不鼓励使用此驱动程序   司机可用。另一个含义是任何应用程序   使用类型1驱动程序是不可移植的,因为它之间的绑定   驱动程序和平台。这项技术不适合   高交易环境。 Type 1驱动程序也不支持   完整的Java命令集并受到其功能的限制   ODBC驱动程序。

点击this

了解详情
  

我需要争论为什么两个separeat SQL SELECT语句更多   比使用JOIN的SQL单一昂贵。

我想说它可能取决于场景。虽然据说JOIN几乎总会有更好的表现。但您仍然可以找到某些情况(尽管很少),其中SELECT语句是首选。

在大多数情况下,我们可以说Join通常会胜过多个单一SELECTS,因为它使数据库能够进行大量优化,因为通过使用JOIN可以减少开销并且知道它有多少个表需要扫描

答案 1 :(得分:1)

在任何情况下,与计算查询/查询结果并将其传递回应用程序的成本相比,将查询传递到数据库服务器的成本可以忽略不计。

正如@RahulTripathi所提到的,根据情景,最新的考虑因素可以决定你想要走哪条路。通常,经验法则是让数据库做它擅长的事情:选择,投影和连接。

虽然在某些情况下你可能确实想要做两个单独的选择。例如,如果以数据库设计者未预料到的方式连接表(在不是外键的列和/或不是主键或甚至没有索引的列上),则数据库是“非常忙碌“,你可能会更好的选择2。

如果将大型表连接到具有大量字段的小型表,则可能需要将查询拆分为两个,尤其是在第二个表未进行大量更改的情况下。在这种情况下,您可以更进一步:您可以缓存第二个表中的记录,只查询第一个表。

但是,正如我上面所说,你需要一个很好的理由不使用单个SELECT查询。