嗨朋友可以告诉我我的查询有什么问题。当我执行时,它锁定数据库5到10分钟,请帮我优化这个查询。
SELECT
u.username,
u.email,
u.created_at,
p.firstname,
p.lastname,
p.address,
p.address_2,
p.city,
p.country,
p.state,
p.zip,
p.phone,
p.phone_2,
u.last_ip,
u.last_login_at,
u.auto_login,
u.registration_page,
s.product_name
FROM
users AS u
Left Join subscriptions AS s ON u.id = s.user_id
Left Join profiles AS p ON u.id = p.user_id
where u.registration_page='Chris_Cleanse' and
u.id not in (select user_id from goal_sheets) and
u.id not in(select user_id from sheet_user_popup_not_adam) and
s.expired=TRUE ORDER BY u.id DESC;
答案 0 :(得分:2)
我认为你的子查询在条件包含大量数据的地方。 也许您可以尝试优化您的SQL,如下所示:
SELECT
u.username,u.email
FROM
users AS u
Left Join subscriptions AS s ON u.id = s.user_id
Left Join profiles AS p ON u.id = p.user_id
Left Join goal_sheets gs ON u.id = gs.user_id
Left Join sheet_user_popup_not_adam sa ON u.id = sa.user_id
where u.registration_page='Chris_Cleanse'
and gs. user_id is null
and sa.user_id is null
s.expired=TRUE ORDER BY u.id DESC;
答案 1 :(得分:0)
尝试使用INNER JOIN
。访问this page,了解JOIN
s。
PS :还在查询中正确转义`table`
和`columns`
个名称。这是一种很好的做法。
更新:运行EXPLAIN SELECT ...
(此处的查询代替SELECT ...
)并分析结果。也可以在这里发布。
答案 2 :(得分:0)
您可以尝试为上述记录创建mysql视图,因为大约有500万条记录