mysql 効率的なクエリMySQL は、左結合の速度を上げるために group by を犠牲にします (インデックスが追加されていると仮定)。 ユーザーテーブル: 100,000 データ 例1: 約200秒 SELECT U.id, A.favorite_count FROM (SELECT id from user) U 左結合( -- いいねの数 SELECT favorite_by AS user_id, SUM(favorite_count) AS favorite_count お気に入りから お気に入り別にグループ化 ) A ON U.id=A.user_id 左結合( -- コメント数 SELECT user_id, COUNT(*) AS comment_count photo_commentより ユーザーIDでグループ化 ) B ON U.id=B.user_id 例2: 1秒以上 uf.user_id、uf.favorite_count、COUNT(pc.id) を comment_count として選択します ( u.id を user_id として選択し、SUM(f.favorite_count) を favorite_count として (SELECT id from user) u から選択します。 LEFT JOIN お気に入り f on f.favorite_by = u.id u.id によるグループ化 ) 左結合 photo_comment pc on pc.user_id = uf.user_id uf.user_id によるグループ化 付録: MySQL で 3 つのテーブルを効率的に結合する方法次の3つのテーブルの結合ステートメント *を選択 t1から t2を(t1.a=t2.a)に結合する t3を(t2.b=t3.b)に結合する ただし、t1.c>=X、t2.c>=Y、t3.c>=Z です。 straight_join として書き直す場合、接続順序をどのように指定し、3 つのテーブルのインデックスをどのように作成すればよいでしょうか? BKAアルゴリズムを使ってみる BKA を使用する場合、「最初に 2 つのテーブルを結合した結果を計算し、次に 3 番目のテーブルと結合する」のではなく、クエリが直接ネストされます。具体的な実装: t1.c>=X、t2.c>=Y、t3.c>=Z の 3 つの条件のうち、フィルタリング後のデータが最も少ないテーブルを最初の駆動テーブルとして選択します。この時点で、次の 2 つの状況が発生する可能性があります。 テーブル t1 または t3 が選択された場合、残りは固定されます。
同時に、最初の駆動テーブルのフィールド c にインデックスを作成する必要もあります。 2 番目のケースでは、選択された最初の駆動テーブルがテーブル t2 である場合、他の 2 つの条件のフィルタリング効果を評価する必要があります。 考え方としては、各結合に参加する駆動テーブルのデータ セットをできるだけ小さくすることです。これにより、駆動テーブルが小さくなります。 要約するこれで、MySQL の効率的なクエリの left join と group by に関するこの記事は終了です。MySQL の効率的なクエリに関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: インタビュアーはCSSで固定アスペクト比を実現する方法を尋ねました
>>: JavaScript で 2 次元配列を作成するためのヒント
コラムを更新してからどれくらい経ったでしょうか?半年ですか?今年の後半は、まさに離陸、つまり文字通り...
CSS の開発履歴についてはここでは紹介しません。ブログを書いている理由の 1 つは、フロントエンド...
自己学習型ゲーム開発の道において、最も充実した瞬間は、自分でミニゲームを作り、友達と共有して試しにプ...
数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...
書き方1: sas_order_supply_month_pay セットを更新 RECEIVE_TI...
最近、顔コレクションに関するプロジェクトに取り組んでいましたが、フロントエンドモジュールを書いている...
序文配列は特別な種類のオブジェクトです。 js には実際の配列はなく、オブジェクトを使用して配列をシ...
目次序文antd はどのようにしてコンポーネントをカプセル化するのでしょうか?ディバイダーコンポーネ...
目次先読みと後読みをキャプチャグループと組み合わせる捕獲グループと非捕獲グループ前を向いて、後ろを振...
この記事では、参考までに、計算機のWebバージョンを実装するためのJavaScriptの具体的なコー...
ここでは主に、スタンドアロンのプログラムを生成できるspring-bootと、Mavenプラグインd...
<META http-equiv="Page-Enter" CONTENT...
li はブロックレベル要素であり、デフォルトで 1 行を占めるため、水平方向の配置を実現する場合は、...
<br />テーブルは、昔から誰もが使ってきたタグで、今も使われています。しかし、現在の...
Linux での Hadoop インストール チュートリアルはインターネットや書籍に多数ありますが、...