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

mysql:2つから最も効率的なクエリを選択する

    バージョン1(ユニオンの両側にある個別のwhere句)の方が高速になることは間違いありません。バージョン(ユニオンの結果に対するwhere句)が悪い理由を見てみましょう:

    • データ量:返される行の条件が少ないため、ユニオンの結果には常により多くの行が含まれます。これは、より多くのディスクI / O(インデックスに応じて)、行セットを保持するためのより多くの一時ストレージを意味し、より多くの処理時間を意味します
    • 繰り返しスキャン:条件を適用するには、最初のスキャン中に処理できた可能性がある場合に、ユニオンの結果全体を再度スキャンする必要があります。これは、おそらくメモリ内ではありますが、行セットを二重に処理することを意味しますが、それでも余分な作業です。
    • インデックスは、ユニオン結果のwhere句には使用されません。外部キーフィールドのインデックスがある場合および postType、使用されません

    最大限のパフォーマンスが必要な場合は、UNION ALLを使用してください 、UNIONの代わりに、オーバーヘッドなしで行を結果に直接渡します。 、重複を削除し(通常は並べ替えによって)、費用がかかる可能性があり、コメントに基づいて不要です

    これらのインデックスを定義し、バージョン1を使用して最大のパフォーマンスを実現します。

    create index t1_authorID_postType on t1(authorID, postType);
    create index t1_websiteID_postType on t1(websiteID, postType);
    


    1. mysql行が配列にないかどうかの確認

    2. 非推奨のoracle.sql.ArrayDescriptor、oracle.sql.STRUCT、およびoracle.sql.StructDescriptorを修正する方法

    3. psql:コマンドが見つかりませんMac

    4. MySQLからJavaコードを呼び出す方法は?