SQL:多个查询与联接(特定情况)

时间:2011-02-09 20:10:44

标签: sql join

这个问题似乎已经被问了很多,答案似乎是“这取决于细节”。所以我要问我的具体案例:对我来说,有多个查询或使用连接更好吗?

详情如下:

  • “products”表 - 可能大约2000行,15列左右
  • “tags”表 - 可能大约10行,3列
  • “types”表 - 可能大约10行,3列

我需要“tags”和“types”表来获取product表中的tag / type-id。

我的直觉说,如果我加入表格,我最终会搜索更大的表格,以便更好地进行多次查询,但我不确定......

思想?

5 个答案:

答案 0 :(得分:3)

不,加入可能会胜过多个查询。你的桌子非常小。

答案 1 :(得分:3)

问问自己在进行多个查询时会涉及哪些额外的工作...我不知道你需要这些数据,但我想你会在某些时候需要关联结果 - 匹配标签和类型对产品,不是吗?如果你不使用连接,那么你只需要在其他地方使用其他机制。

此外,您对此的构想忽略了这样一个事实:数据库设计用于连接方案。如果执行三个独立查询,则数据库无法在您要查找的结果中优化其查询行为。如果您在一个带有连接的查询中执行此操作,则确实有这个机会。

留下产生〜2000 * 10 * 10记录的结果集的问题,然后将其过滤到数据库,在我看来 - 这就是它的。 :)

答案 2 :(得分:1)

数据量太小而无法演示一个,但多个单独的查询将使用更多关于通过线路传输而不是单个查询。存在数据包开销,如果数据集在查询之间发生更改(如果不在同一事务中),则单独的数据集存在风险差异。

具体可能不需要JOIN,如果支持表不公开结果集中的列,则可以使用EXISTS或IN。表格之间的联接是父母和子,并且父母可以有多个孩子会给搜索的行充气 - 不一定是返回的行。

答案 3 :(得分:0)

假设主键上的所有内容都有索引(您应该这样做),那么连接将非常有效。连接更糟糕的唯一情况是,如果您对查询结果进行某种外部缓存(因为某些ORM会为您做),您的产品表会更大,并且您以足够的速率查询以保持结果缓存中的两个较小的查询(但不是第三个)。在这种情况下,多个查询变得更快,因为您只是在三个查询之一。但差异很难衡量。

答案 4 :(得分:0)

如果数据库不在localhost上但通过网络访问,最好发送一个请求,让数据库完成工作并立即检索数据。这样可以减少网络延迟。所以加入是首选。