我有2张桌子A,B
A: id is primary key and indexed id, type_id, status ------------------ 1, 1, True 2, 1, False 3, 2, False ... B: (Type) type_id is primary key and indexed type_id, param ---------- 1, 23 2, 35 3, 24
我想选择的所有行B具有至少1相关条目A与status True
B
A
status True
select distinct B.id, B.param from B join A on A.type_id = B.type_id where A.status = true
这是个好方法吗?
我将以这种方式执行此操作(它在大多数数据库系统中均应有效:
select * from b where type_id in ( select type_id from a where status = true )
关于您的问题是否是一个好方法的问题,我的回答是否定的,这不是一个好方法,因为它可能会迫使一个大的中间记录集(通过联接),然后在中间记录集上耗费大量时间。
更新
经过一番思考,我意识到没有绝对的好或坏的解决方案。这完全取决于每个表中的数据(总记录,值分布等)。因此,请继续进行明确的传达意图,并准备在生产中遇到性能问题时尝试不同的意图。