【发布时间】:2017-06-29 23:07:19
【问题描述】:
我有一个名为“items”的表格,看起来像这样......
id | name
––––––––––––
1 | APPLES
2 | BANANAS
3 | ORANGES
4 | PEARS
...和一个名为“pairs”的联结表,在项目之间创建多对多关系...
id | item1_id | item2_id
––––––––––––––––––––––––
1 | 1 | 2
2 | 1 | 4
3 | 2 | 3
4 | 2 | 4
5 | 4 | 3
我有以下查询来查找与给定项目配对的项目...
SELECT * FROM items i
WHERE
i.id IN (SELECT item1_id FROM pairs WHERE item2_id = 4)
OR
i.id IN (SELECT item2_id FROM pairs WHERE item1_id = 4)
返回类似...
id | name
––––––––––––
1 | APPLES
3 | ORANGES
...它完成了这项工作,但是运行速度很慢(使用大约 100 个项目的小型测试数据集,1000 个配对已经花费了大约 75 毫秒)。
我的问题是——这是否可以进一步优化以加快速度(例如,使用联接而不是嵌套查询)?
感谢您的帮助。
【问题讨论】: