最初のものが最初です:私は同様の質問を探しましたが、何が私が行っていることが悪い習慣であるのかを説明するものは何も見つかりませんでした。非常に基本的なもの。非常に大量のデータを含むSQLクエリを最適化する
DBに負荷がかかりすぎているとの苦情を受けましたが、最適化の方法がわからないので、ここで助けを求めています。
私は下部に取り組んでいる構造の写真を添付しました。私は何をしようとしているのですか: 特定のuserActionを実行した人のリストを取得する必要があります( 'viewProduct'と言い、userAge、国および大陸に関するその人の情報を追加してください)
select u.userId, u.userAge, c.countryName, co.name, ul.createdTime,
ul.userAction
from user_log as ul
left join user as u ON u.userId = ul.userId
left join country as c ON c.id = u.userCountryId
left join continent as co ON co.id = c.continentId
where ul.createdTime > '2016-06-01'
and u.userAge > 40
and (ul.userAction like 'viewProduct'
or ul.userAction like 'storeProduct'
or ul.userAction like 'addProduct'
);
そして、これは明らかに十分ではありませんので、私は心から誰かがこれをより効率的にする方法について助けることができるかもしれないことを願って、私は非常にテーブルを扱うには慣れていない:以下を書か
アイブ何百万ものエントリがあります。
ありがとうございました!
'join'sと' where'で使用するカラムにインデックスがありますか? – Shnugo
ユーザデータは毎回4つのテーブルすべてに存在するか、それともそれが依存しているかです。不適切な方法で使用している別のものは、検索条件に従ってテキストの前後に%記号を使用します。クエリプランを最適化するための – Susang
が役に立ちます。 1つの質問はあなたのIDにあなたが参加しているIDにインデックスがあるかどうかです。 – Nebi