我有两个表用户和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表很大,所以花费太多时间。

谁能帮助我如何优化此查询?

mysql - 优化mysql NOT IN查询-LMLPHP
mysql - 优化mysql NOT IN查询-LMLPHP

最佳答案

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(我认为这些技巧不会显着帮助此查询。)

09-28 14:03