SQLクエリに問題があります。これは、その上の任意の賭けずにメンバーから販売されているすべてのカードを返す必要があります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
:私は、私はのように見える大きなものを作ることを好む、PHPのWebサイトを開発していて、あまりにも多くのクエリを避けるために。その結果、私はそれらを表示するためにすべての情報が必要です。
メルカート:1200
cartes_joueur:800 000
- carte_joueur_base:62
- membres 2000
-
ここでは、各テーブルの近似列でありますmercato_enchere:15 000
古いデータを削除して(開発環境で)それらを縮小しようとしました。クエリはまだ実行するのに10〜15秒必要です(これはウェブサイトでは長すぎます)
ありがとうございました。
説明プランはあなたに何を伝えますか? –
サブクエリが問題だと思います。それを外部結合に変更して、1つのフィールドを後方にnullにチェックしてみてください。 – 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