在我当前的项目中,有一些情况,在数据泵操作中,我必须执行这样的查询(这不是一个真实的例子,但它应该给你一些想法):
DELETE FROM notification
WHERE user_id NOT IN (SELECT id FROM user)
在大表上,这样的构造表现不佳,我认为是因为NOT IN
构造导致无法使用索引。
这种方法应该表现更好:
DELETE FROM notification
USING (
SELECT n.user_id, u.id FROM notification
LEFT OUTER JOIN user u ON n.user_id = u.id
) i
WHERE
notification.user_id = i.user_id
AND i.id IS NULL
......但它看起来有点过于复杂。
对于此类操作,是否有更好的方法/最佳实践?
我们可以使用EXISTS
:
DELETE FROM notification
WHERE NOT EXISTS
(SELECT id FROM user WHERE id = notification.user_id)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句