PostgreSQL左joinselectVS Normalselect

我想知道哪个更快 – 连接几个select到一个连接select或实际上做单独的select是更快?

我正在做一个有很多表格的任务(目前是4,但是可能会增加),我通过LEFT JOINselect它们。 将做这样的SQL查询postgresql得到它的边缘?

你怎么看你的经验:)

答案是“这取决于你的数据库”,尽pipe通常将查询写为JOIN是首选,因为它更容易阅读,并为查询规划者提供了一些关于你在做什么/

你应该问Postgres EXPLAIN (或EXPLAIN ANALYZE )查询的查询计划,看看是否有任何实质性的差异 – 同时你也可以发现一些其他的东西,你可以优化,如索引。 有关使用EXPLAIN更多信息,请参阅Postgres手册 。

一般来说,准备每个查询和检索数据的成本是有成本的。 对于小数据集,在循环中执行SELECT并不是那么糟糕,但是如果你在一个有1000行的表上做一个SELECT,那么对于在1000行不同的表上做另一个SELECT的每一行,即使循环select是从预先准备的查询中执行的,也是非常明显的。

即使在循环中准备每个查询的成本为零,JOINed元素也可能会减less所检索数据的总大小。 例如,如果要将1000行表与一个只包含一个匹配行的表连接起来,则查询的JOIN版本将返回一行,而单独的SELECT将从第一个表返回1000行,产生999的循环空集和1行。

如果你从每个表中请求一个特定的项目,而不是遍历一组行,那么一个“大”查询和4个小查询之间的区别可能是微乎其微的。 正如voretaq7所说的,让postgresql来解释每个查询将做什么以及需要多长时间才能做到这一点,将会很快找出究竟会发生什么。