SQL最適化:サブクエリ->派生テーブル->join関連付け
1202 ワード
今日フォーラムで質問がありました.文を最適化する必要があります.
すべてのrecommend_を同じテーブルで検索idはuser_に等しいidの個数は、個数に基づいてフィルタリングされます.
この文はクエリーの速度が遅すぎて、どのように最適化するか、あるいはどのように書くかでこのクエリーの問題を解決することができます.
(1)上記の文は、典型的な相関サブクエリです.
(2)ここではまず派生テーブルサブクエリに変更する.
(3)業務要求により、inner joinまたはleft joinに変更
対照的に、3番目の書き方の文は、よりパフォーマンスが向上します.
転載先:https://www.cnblogs.com/momogua/p/8304405.html
select *,
(select count(1)
from `ol_classify`
where recommend_id = u.user_id AND
`Creation_time` >= 1477929600 ) count
from `ol_classify` u
where u.state >0
HAVING count >= 4
すべてのrecommend_を同じテーブルで検索idはuser_に等しいidの個数は、個数に基づいてフィルタリングされます.
この文はクエリーの速度が遅すぎて、どのように最適化するか、あるいはどのように書くかでこのクエリーの問題を解決することができます.
(1)上記の文は、典型的な相関サブクエリです.
(2)ここではまず派生テーブルサブクエリに変更する.
select *,
o.count
from `ol_classify` u
inner join
(
select recommend_id,
count(1) count
from `ol_classify` o
where `Creation_time` >= 1477929600
group o.by recommend_id
)o
on o.recommend_id = u.user_id and o.count >= 4
where u.state >0
(3)業務要求により、inner joinまたはleft joinに変更
select u.user_id,
u.xx,
u.yy,
...,
count(*) as count
from `ol_classify` u
inner join `ol_classify` o
on o.recommend_id = u.user_id
and `Creation_time` >= 1477929600
where u.state >0
group by u.user_id
having count>=4
対照的に、3番目の書き方の文は、よりパフォーマンスが向上します.
転載先:https://www.cnblogs.com/momogua/p/8304405.html