SQL成本比较INNER JOIN和SELECT两次

时间:2013-07-19 02:46:13

标签: sql

有两个表具有公共字段ID。我想要做的是选择特定id的所有属性,我想知道哪种方式更有效。

  1. 使用INNER JOIN,然后执行单个SELECT *操作。
  2. 首先从较小的表中选择,如果id存在,则从较大的表中选择。

3 个答案:

答案 0 :(得分:2)

在大多数数据库中,您希望进行连接:

select *
from bigtable b join
     smalltable s
     on b.id = s.id
where b.id = @id;

SQL引擎有一个优化器来确定查询的最佳执行计划。正如评论中提到的那样,拥有一个索引可以加快速度。

通过从一个表中选择,然后从另一个表中选择,您将强制执行特定的执行计划。

通常,您应该信任SQL引擎以生成最佳执行计划。在某些情况下,做一个然后另一个可能更好,但通常情况并非如此。

答案 1 :(得分:0)

这将根据每种情况而有所不同。你不能做出一个通用的陈述,说一个人总会更好。 要进行比较,您可以查看执行计划,或者只是运行两者并根据执行时间进行比较。

例如:如果在第二个表中很难找到数据,那么随着时间的推移,运行单个查询等可能会更好

答案 2 :(得分:0)

我建议你采取第二种方式。

最好将一些主要/主要信息保存在index table中,然后将额外/详细信息放在另一张大桌子上。

将信息分为两部分(main / primary | extra / detail),因为大多数时候,我们只有第一部分信息,它可以节省大量查询,大数据传输,净带宽的成本。