我正面臨着SQL查詢的問題。我正在開發一個PHP的網站,並避免讓太多的疑問,我寧願做一個大一個看起來像:SQL查詢需要太多時間(3個連接)
select m.*, cj.*, cjb.*, me.pseudo as pseudo_acheteur
from mercato m
JOIN cartes_joueur cj
ON m.ID_carte = cj.ID_carte_joueur
JOIN cartes_joueur_base cjb
ON cj.ID_carte_joueur_base = cjb.ID_carte_joueur_base
JOIN membres me
ON me.ID_membre = cj.ID_membre
where not exists (select * from mercato_encheres me where me.ID_mercato = m.ID_mercato)
and cj.ID_membre = 2
and m.status <> 'cancelled'
ORDER BY total_carac desc, cj.level desc, cjb.nom_carte asc
這應該返回由會員銷售的所有卡上沒有任何賭注。結果,我需要所有的信息來顯示它們。
下面是每個表中的近似行:
梅爾卡託:1200
cartes_joueur:800 000
- carte_joueur_base:62
- membres:2000
- mercato_enchere:15 000
我試圖通過刪除舊數據來減少它們(在開發環境中)但查詢仍然需要10〜15秒才能執行(這在網站上太長了)
感謝您的幫助。
解釋計劃告訴你什麼? –
我猜子查詢是問題所在。嘗試將其更改爲外部聯接,並檢查一個字段是否爲空。 – Sirko
請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢。此外,對於有關查詢優化的問題,我們將在適當的時候看到EXPLAIN。但讓我們先查詢一下 – Strawberry