我们可以使用in语句将SQL连接分解为几个查询吗?


Can we decompose SQL joins in several queries using IN statement

No 'orm的创建者展示了可以将3个表的连接分解为3个更快的查询:http://www.notorm.com/#performance.

你认为有可能通过在in语句中放置id来避免连接和使用多个查询吗?

因为上面提到的原因,那个库(NoORM)不支持连接,你认为我可以放弃使用连接而只使用那个库吗?在我看来,避免连接是如此容易,这似乎很奇怪。

对于规模相对较小的应用程序,这是可行的。但是在可能传递许多参数的情况下(相当于在许多行上匹配连接条件),这将使您失败。我能想到的最好的例子是Informix的一个限制,例如(我不知道最新版本是否如此),其中准备好的语句不允许传递超过20个(不精确)左右的参数。

在单个查询上使用连接的一个原因是,它允许数据库的优化器根据现有数据为所涉及的表提出最佳计划。如果将一个已连接的查询拆分为单个查询,那么您实际上是在硬编码执行计划。除其他事项外,这假定您在编写代码时将花一些时间考虑查询的选择性,并且在应用程序的整个生命周期中,这种选择性将保持不变。在我看来,这些都是相当大的假设。

同样,如果你使用你的数据库不仅仅是一个哑容器,你可能会发现有些查询不那么容易分解成单独的查询(例如,几乎在任何时候你使用聚合函数)。