有两个具有共同字段 ID 的表。我想要做的是选择特定id的所有属性,我想知道哪种方式更有效。
- 使用 INNER JOIN,然后完成单个 SELECT * 操作。
- 先从小表中选择,如果id存在,再从大表中选择。
有两个具有共同字段 ID 的表。我想要做的是选择特定id的所有属性,我想知道哪种方式更有效。
在大多数数据库中,您想要进行连接:
select *
from bigtable b join
smalltable s
on b.id = s.id
where b.id = @id;
SQL 引擎有一个优化器来确定查询的最佳执行计划。正如评论中提到的,拥有一个索引通常会加快速度。
通过从一个表中选择,然后从另一个表中选择,您正在强制执行特定的执行计划。
通常,您应该相信 SQL 引擎能够生成最佳执行计划。在某些情况下,最好先做一个然后再做另一个,但通常情况并非如此。
这将根据每种情况而有所不同。你不能做出笼统的说法,说总是会更好。要进行比较,您可以查看执行计划,或者简单地运行两者并根据执行时间进行比较。
例如:如果很少在第二个表中找到数据,那么随着时间的推移,运行单个查询等可能会更好
我建议你采取第二种方式。
将一些主要/主要信息保留在 中是一个好习惯index table
,然后将额外/详细信息放在另一个大表上。
把info分成两部分(main/primary | extra/detail),因为大多数时候我们只处理第一部分info,这样可以节省大查询、大数据传输、净带宽的成本。