如何在执行查询时解决数据库锁定问题

时间:2014-03-03 08:43:01

标签: php mysql database performance

嗨朋友可以告诉我我的查询有什么问题。当我执行时,它锁定数据库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;

3 个答案:

答案 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万条记录