ホームページ >バックエンド開発 >PHPチュートリアル >mysql 最適化問題 where の使用 filesort の使用

mysql 最適化問題 where の使用 filesort の使用

WBOY
WBOYオリジナル
2016-06-23 13:13:101662ブラウズ





説明 select userid from Team_enewsmember where Agentid in(select userid from Team_enewsmember where Agentid='2' and levelid>=1 group by userid) and levelid>=1 group by userid

主キー userid が次の場合Agentid と組み合わせるとインデックスが表示されます。 where を使用します。index を使用します。
filesort を使用するが削除できません。


ディスカッションへの返信 (解決策)

userid は主キーですが、なぜ userid ごとにグループ化する必要があるのでしょうか? ?

主キーは一意である必要があり、グループの追加は不要です

userid が主キーですが、なぜ userid でグループ化する必要があるのですか? ?

主キーは一意である必要があります。グループの追加は不要です
ありがとうございます!それを削除した後は、Where を使用するだけです


内部結合または左結合を使用して上記のクエリを取得し、結果をクエリする方法を教えてください。
結果を再度クエリする とはどういう意味ですか?

内部結合と左結合は異なる結果セットを持ち、
を使用して結合することはできません。結果を再度クエリするとはどういう意味ですか?

内部結合と左結合は異なる結果セットを持ち、

を使用して結合することはできません
MySQL サブクエリ ステートメントは内部結合または左結合に変更されました そのとき初めて、同じテーブルをチェックしていることに気づきました

そして、自己結合は不可能です まだですか?


同じテーブルをチェックしていることに今気づきました

それなら自己結合で十分ではないでしょうか?

同じテーブルですが、この場合の自己結合の書き方を教えてください。自分では書けないので仕方がありません。


以上です

select userid  from team_enewsmember a, team_enewsmember b  where a.agentid=b.userid and b.agentid='2' and b.levelid>=1 and a.levelid>=1

以上です

select userid  from team_enewsmember a, team_enewsmember b  where a.agentid=b.userid and b.agentid='2' and b.levelid>=1 and a.levelid>=1

team_enewsmember から a.userid を a として選択し、team_enewsmember を b として選択します (a.userid=b.userid、b.agentid='2'、および b.levelid>=1)。

a.

useridを選択してください。ありがとうございます!これで問題ありません。第 3 レベルのノードと第 4 レベルのノードを確認する方法は、サブクエリとして自己結合を使用しますか?
2の最初のノード3、
3の最初のノード4、4の最初のノード5
カスケードデータをチェックしていますか?その場合、再帰を使用するか、データ構造を変更する必要があります
固定レベル 4 以内であれば、これで問題ありません

カスケードデータをチェックしていますか?次に、再帰を使用するか、データ構造を変更する必要があります。
それが固定レベル 4 内にある場合のみ、これは問題ありません。

はい、見つかったユーザー ID に基づいて、ユーザー ID の各レベルに関連する他のデータをクエリする必要があります。でも大丈夫です、ありがとう!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。