我在网上搜索了一个 JDBC 调用是如何传输到数据库管理系统的。我想知道的是,即使数据库是本地的,JDBC 调用是否会产生网络流量以便与 DBMS 通信?
我需要争论为什么两个单独的 SQLSELECT
语句比一个带有JOIN
.
简单的答案是使用 JDBC 驱动程序。
该驱动程序依赖于平台,因为它使用 ODBC,而 ODBC 又依赖于运行 JVM 的底层操作系统的本机库。此外,使用此驱动程序会导致其他安装依赖项;例如,ODBC 必须安装在具有驱动程序的计算机上,并且数据库必须支持 ODBC 驱动程序。如果可以使用纯 Java 驱动程序的替代方案,则不鼓励使用此驱动程序。另一个含义是,鉴于驱动程序和平台之间的绑定,任何使用类型 1 驱动程序的应用程序都是不可移植的。该技术不适合高交易环境。类型 1 驱动程序也不支持完整的 Java 命令集,并受到 ODBC 驱动程序功能的限制。
查看更多信息
我需要争论为什么两个单独的 SQL SELECT 语句比带有 JOIN 的单个 SQL 语句更昂贵。
我会说这可能取决于场景。虽然据说这JOIN
几乎总是会有更好的表现。但是您仍然可能会发现某些情况(尽管很少)SELECT
首选语句。
在大多数情况下,我们可以说它Join
通常会优于多个单个 SELECTS,因为它使数据库能够进行大量优化,因为使用 JOIN 减少了开销并且它知道它必须扫描多少表。
在任何情况下,将查询传递到数据库服务器的成本与计算查询/查询结果并将它们传递回应用程序的成本相比都可以忽略不计。
正如@RahulTripathi 所提到的,根据情况,最新的考虑中的任何一个都可以确定您想要走的路。通常,经验法则是让数据库做它擅长的事情:选择、投影和连接。
尽管在某些情况下,您可能确实想要进行两次单独的选择。例如,如果您以数据库设计者未预料到的方式连接表(在不是外键的列和/或不是主键甚至没有索引的列上)并且数据库是“非常忙”,您可能会更好地选择 2 个选项。
如果您将一个大表连接到一个包含很多字段的小表,您可能希望将您的查询一分为二,尤其是在第二个表没有太大变化的情况下。在这种情况下,您可以走得更远:您可以缓存第二个表中的记录,只查询第一个表。
但是,正如我上面所说,您需要有充分的理由不使用单个 SELECT 查询。