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 次元配列を作成するためのヒント
MySQL をインストールした後、DOS ウィンドウまたは MySQL 5.7 コマンドライン クラ...
Anaconda は、conda、Python、およびそれらの依存関係など、180 を超える科学パッ...
clear プロパティを使用してフロートをクリアすることはよくあることであり、clear プロパティ...
MySQL データベースのバージョンを 5.6.28 から 8.0.11 にアップグレード中にプロジ...
目次1. forループ2. 二重の for ループ3. whileループ4. dowhileループ5...
目次1. サービスの開始と停止の手順1.1 Windows での MySQL 5.7 の公式 MSI...
1. csvファイルをインポートする次のコマンドを使用します。 1.mysql> infile...
1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...
目次1. データベース内の MySQL ステータスを確認します。 2. 設定ファイルを変更します。 ...
目次WiFiワイヤレステクノロジーの紹介1. WiFiテクノロジーの概要2. ESP8266の紹介W...
この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...
序文MySQL の rowid の概念については聞いたことがあるかもしれませんが、テストや実践が難し...
Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...
この記事では、Webサイトを作ったことがある人にとっては馴染みのあるテーブルについて主に説明します。...
HTML ウェブ ページのハイパーリンク タグの学習チュートリアル リンク タグの属性 リンクは、ウ...