我有两个表用户和postmeta。我想从用户表中获取用户ID,并希望过滤postmeta表中不存在的用户ID。
这是我的mysql查询
SELECT u.ID from users WHERE u.ID NOT IN (SELECT DISTINCT(meta_value) from postmeta WHERE meta_key = '_customer_user')
以上查询工作正常,但由于我有成千上万的用户,而且postmeta表很大,所以需要花费太多时间。
有人可以帮我解决如何优化此查询的问题吗?
答案 0 :(得分:0)
查看expalin,并使用not exists替换
答案 1 :(得分:0)
试试这种方式
SELECT u.ID
FROM diet_users AS u
WHERE NOT EXISTS
(SELECT pm.meta_value
FROM diet_postmeta AS pm
WHERE meta_key = '_customer_user'
AND pm.meta_value = u.ID)
希望这有帮助!
答案 2 :(得分:0)
SELECT u.ID
FROM users
WHERE NOT EXISTS ( SELECT *
FROM postmeta
WHERE meta_key = '_customer_user'
AND meta_value = u.ID )
由于这有点像WP,我推荐一些关于wp_postmeta性能的提示:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta(我认为这些提示不会显着帮助此查询。)