在页面上,我有一个查询,这会降低页面加载速度。
SELECT * FROM users1 WHERE user_id NOT IN (SELECT user_id FROM users2)
USERS1
是包含该网站所有用户的表格,包含大量数据。
USERS2
是跟随其他用户的表格。
所以,我需要选择一些用户,这些用户并不是很好的。
任何优化方式?
我发布了真正的查询:
SELECT users.*
FROM (
SELECT user_id
FROM users
WHERE user_id!=156 AND user_id NOT IN (
SELECT follower_id
FROM following
WHERE user_id=156
) ORDER BY RAND() LIMIT 2
) AS temp
JOIN users ON users.user_id = temp.user_id;
user_id
字段的索引。
查询耗时0.0912秒
此查询在具有较少数据的测试服务器上运行不错,但在实时查询上最多需要3秒。
答案 0 :(得分:2)
LEFT JOIN
方式:
SELECT *
FROM users1
LEFT JOIN users2 ON users1.user_id = users2.user_id
WHERE users2.user_id IS NULL
NOT EXISTS
方式:
SELECT *
FROM users1
WHERE NOT EXISTS (SELECT 1 FROM users2 WHERE users1.user_id = users2.user_id)
答案 1 :(得分:1)
您应该使用LEFT JOIN
以获得最佳效果:
SELECT a.*
FROM users1 a
LEFT JOIN users2 b
ON a.user_id = b.user_id
WHERE b.user_id IS NULL;
答案 2 :(得分:0)
这应该可以解决问题:
SELECT users1.* FROM users1
LEFT JOIN users2 on users1.user_id=users2.user_id
WHERE users2.user_id IS NULL