sql >> データベース >  >> RDS >> Mysql

サブクエリにインデックスを付けることはできますか?

    まず、一時テーブルの作成が絶対に実行可能なソリューションであることを知っておく必要があります。しかし、他の選択肢が当てはまらない場合は、ここでは当てはまりません!

    あなたの場合、クエリを FrankPlとして簡単にブーストできます。 サブクエリとメインクエリの両方が同じフィールドでグループ化されているため、指摘されました。したがって、サブクエリは必要ありません。完全を期すために、FrankPlのソリューションをコピーして貼り付けます。

    SELECT o.property_B, SUM(o.score1), SUM(o.score2)
    FROM o
    GROUP BY property_B;
    

    ただし、サブクエリにインデックスを付けたいというシナリオに出くわすことは不可能ではありません。この場合、2つの選択肢があります。最初は、自分で指摘した一時テーブルを使用して、サブクエリの結果を保持することです。このソリューションは、MySQLによって長期間サポートされているため、有利です。大量のデータが関係している場合、それは実行不可能です。

    2番目の解決策は、MySQLバージョン5.6以降を使用することです 。 MySQLの最近のバージョンでは、新しいアルゴリズムが組み込まれているため、サブクエリ内で使用されるテーブルで定義されたインデックスをサブクエリ外でも使用できます。

    [更新]

    質問の編集版については、次の解決策をお勧めします:

    SELECT o.property_B, SUM(IF(o.property_A = 'specific_A', o.score1, 0)), SUM(o.score2)
    FROM o
    GROUP BY property_B
    HAVING SUM(IF(o.property_A = 'specific_A', o.score1, 0)) > 0;
    

    ただし、HAVINGに取り組む必要があります 部。実際の問題に応じて変更する必要があるかもしれません。



    1. Flask-SQLAlchemyを使用するFlaskアプリケーションが実行されている場合、同じデータベースで同時にMySQLクライアントを使用するにはどうすればよいですか?

    2. MySQLでrow_numberを取得する方法

    3. エラーの取得操作'='の照合(utf8mb4_unicode_ci、IMPLICIT)と(utf8mb4_general_ci、IMPLICIT)の不正な組み合わせ

    4. 並列統計再構築のサポートの改善