【发布时间】:2017-01-08 08:44:36
【问题描述】:
我对加入有点陌生,所以我什至不确定这是否可能。我一直在谷歌搜索并尝试了一些东西..
我需要什么:
选择data.id 对应的user2data.user_id 不存在 where user2data.user_id = 'X'
令人兴奋对吧? :D
什么有效:
SELECT * FROM data WHERE NOT EXISTS (SELECT * FROM user2data WHERE user2data.user_id=1 AND user2data.data_id=data.id) LIMIT 100;
但是,即使所有 3 列都已编入索引,它也很慢。为此,我从另一个 SO 答案中尝试了 OUTER JOIN,但它比上面的还要慢。我需要的是 INNER JOIN。
请让我知道这是否真的可行,或者是否有利用索引的替代方法。
谢谢,最好的
【问题讨论】:
-
我建议在
user2data上使用 复合 索引而不是(user_id, data_id)。 -
您不能对不存在的数据进行内部联接。
-
确保要加入的列已编入索引,然后外部联接应该很快。
-
@eggyal 感谢您的建议。它确实加快了一些速度,但并不接近在类似情况下内部连接所带来的性能
-
查看@Quassnoi 的博客,了解在not-nullable 和nullable 列上执行反连接操作时的性能讨论。
标签: mysql join inner-join not-exists