簡體   English   中英

加快sql查詢並修復聯接

[英]speeding up an sql query and fixing the join

我有以下查詢,其中列出了所有具有匹配Facebook帳戶的帳戶-問題是,有時Facebook表中有多行與聯接匹配,因此即使有ac.id AS,我們也會重復返回重復的行id應該是唯一的主鍵。

SELECT ac.id AS id
    , ac.first_name
    , ac.last_name
    , ac.email
    , ac.company_name
    , upd8r_facebook_accts.id AS fb
FROM upd8r_user_accts ac
LEFT OUTER JOIN upd8r_facebook_accts 
    ON ac.id = upd8r_facebook_accts.user_id
WHERE ac.`rfid` =  ''
AND ac.last_name !=  ''
AND ac.`owner_id` =  '121'
ORDER BY ac.`last_name` ASC 

有兩個問題是返回重復的行(我認為它是在facebook表中有多行匹配upd8r_user_accts.id的情況。查詢需要10秒鍾才能運行...我在upd8r_user_accts.id上有一個索引,認為這可能幫助,但沒有

小費:

  • 在帶有ONWHERE列上建立索引

  • 通過SELECT STRAIGHT JOIN更改SELECT

由於upd8r_user_accts.id是主鍵-在此列上添加索引將無濟於事,並且是多余的。 您的查詢結果表明某些用戶具有多個facebook帳戶。 如果沒有ID列,則無需聲明數據類型,但可以嘗試類似的操作。

SELECT ac.id AS id, ac.first_name, ac.last_name, ac.email, ac.company_name, upd8r_facebook_accts.id AS fb
FROM upd8r_user_accts ac
LEFT OUTER JOIN upd8r_facebook_accts ON ac.id = upd8r_facebook_accts.user_id
WHERE ac.`rfid` =  ''
AND ac.last_name !=  ''
AND ac.`owner_id` =  '121'
AND upd8r_facebook_accts.id = (SELECT MAX(ufa.id) FROM upd8r_facebook_accts ufa WHERE ufa.user_id = ac.id)
ORDER BY ac.`last_name` ASC

這樣的效果是每位用戶僅顯示一行,但是請記住,它刪除的行可能不是您要從結果中刪除的行。 它還假定您可以在ID列上執行MAX函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM