【发布时间】:2015-10-22 06:55:37
【问题描述】:
我使用的是 PostgreSQL 9.3 并有以下表格(简化为仅显示相关字段):
SITES:
id
name
...
DEVICES:
id
site_id
mac_address UNIQUE
...
给定特定设备的mac_address,我想获取关联site 的详细信息。我有以下两个查询:
使用左连接:
SELECT s.* FROM sites s
LEFT JOIN devices d ON s.id = d.site_id
WHERE d.mac_address = '00:00:00:00:00:00';
使用子查询:
SELECT s.* FROM sites s
WHERE s.id IN (SELECT d.site_id FROM devices d WHERE d.mac_address = '00:00:00:00:00:00');
对于无限增长的数据库,这两个查询中哪一个的性能最好?我一直倾向于LEFT JOIN 选项,但我很想知道这两种速率在大型数据集上的表现如何。
【问题讨论】:
-
拿
EXPLAIN自己查吧。 -
或者更好:使用
explain analyze。另外:如果devices中有多行具有相同的 mac_address,那么这两个语句的作用不同。 -
我认为它们甚至会生成不同的结果集,因此它们是无与伦比的。
-
@Caramiriel 我相信他们返回“相同”的结果集。
-
伙计们,我们在浪费彼此的时间 - 解决方案是在前两个 cmets 中提供的。我们停止这个聊天怎么样 OP 去检查
EXPLAIN;-)
标签: performance postgresql optimization subquery left-join