2014-03-03 44 views
0

嗨朋友有誰能告訴我什麼是我的查詢問題。當我執行時,它將數據庫鎖定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

這個問題更適合http://dba.stackexchange.com/或http://codereview.stackexchange.com/ –

+0

你能發佈'EXPLAIN SELECT u.username,...'的輸出(解釋你的查詢)? –

+0

@D。 Kasipovic在這裏是輸出http://i.imgur.com/R1PYdeI.png – Haseeb

回答

2

我想在條件DATAS包含了過多的子查詢。 也許你可以嘗試優化您的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; 
0

嘗試使用INNER JOIN。請訪問this page以獲得JOIN s的視覺解釋。

PS另外,在查詢正確轉義`table``columns`名。這是很好的做法。

UPDATE:(這裏不是SELECT ...查詢)運行的EXPLAIN SELECT ...和分析結果。也張貼在這裏。

+0

感謝CodeAngry的回覆,我試了一下,但它不工作:( – Haseeb

+0

@haseeb表中有多少條記錄?查看更新 – CodeAngry

+0

差不多500萬條記錄 – Haseeb

0

您可以通過上面記錄MySQL視圖嘗試,因爲有大約5萬條記錄

相關問題