サブクエリを使用したMYSQLクエリのパフォーマンスの問題

アリ・マフモウディ

以下のクエリでパフォーマンスに大きな問題があります。リークとは何かがわかりましたが、回避方法がわかりません。

問題は、内部選択が200Kのようなテーブル内のすべてのレコードを調べてから、フィルターを選択して適用しようとし、最初のラウンドでデータ全体が選択されるようにすることです。

SELECT *
FROM (
    SELECT 
        ( SELECT GROUP_CONCAT(tp.login) login
              FROM tp
              WHERE tp.user_id = ue.user_id ) login, 
        u.email as email, 
        ue.fname as name 
    FROM user_extra ue
    LEFT JOIN users u ON u.id = ue.user_id 
) t
WHERE 
    email like '%[email protected]%'
    OR fname like '%test%'
    OR login like '%461988%
ではない

テストは間違いを犯していません:

SELECT GROUP_CONCAT(tp.login) login,
       u.email as email, 
       ue.fname as name
FROM user_extra ue
JOIN users u ON u.id = ue.user_id    -- I doubt in LEFT
JOIN tp ON tp.user_id = ue.user_id
GROUP BY ue.fname,
         u.email
    -- , ue.user_id -- maybe needed, but I doubt
HAVING email like '%[email protected]%'
    OR fname like '%test%'
    OR login like '%461988%

これは中間バリアントであり、後でUNIONと組み合わせた2つ(またはデータによっては3つ)の個別のクエリに分割する必要があります。


1人のユーザーがログインしていない(tpテーブルに彼のレコードがない)場合がありますが、fnameの電子メールで顧客の検索用語が一致したかどうかを表示したいのですが、これを行う方法は?– Ali Mahmoudi

このような場合、このテーブルは外部結合(LEFT JOIN)を使用して結合する必要があります。–アキナ

左結合を使用すると、パフォーマンスが問題になる前のようになり、クエリが200秒間実行されます– Ali Mahmoudi

上で述べたように、これは中間バリアントです。それが正しければ、tp次の場所にない可能性を考慮して分割しましょう

    SELECT GROUP_CONCAT(tp.login) login,
           u.email as email, 
           ue.fname as name
    FROM user_extra ue
    JOIN users u ON u.id = ue.user_id    -- I doubt in LEFT
    LEFT JOIN tp ON tp.user_id = ue.user_id
    WHERE u.email like '%[email protected]%'
    GROUP BY ue.fname,
             u.email
UNION ALL
    SELECT GROUP_CONCAT(tp.login) login,
           u.email as email, 
           ue.fname as name
    FROM user_extra ue
    JOIN users u ON u.id = ue.user_id    -- I doubt in LEFT
    LEFT JOIN tp ON tp.user_id = ue.user_id
    WHERE ue.fname like '%test%'
    GROUP BY ue.fname,
             u.email
UNION ALL
    SELECT GROUP_CONCAT(tp.login) login,
           u.email as email, 
           ue.fname as name
    FROM user_extra ue
    JOIN users u ON u.id = ue.user_id    -- I doubt in LEFT
    JOIN tp ON tp.user_id = ue.user_id
    GROUP BY ue.fname,
             u.email
    HAVING login like '%461988%

出力が正しいかどうかをテストします。

重複が発生する場合は、UNIONALLをUNIONDISTINCTに置き換えてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

サブクエリとGROUPBYを使用したMySQLSELECTのパフォーマンス

分類Dev

Djangoクエリセットを使用したクエリ日付オブジェクトのパフォーマンスの問題があります

分類Dev

SQL結合サブクエリの問題/パフォーマンス

分類Dev

パフォーマンスの問題のクエリを特定する方法 - MYSQL

分類Dev

数学計算を使用したクエリのパフォーマンスの問題

分類Dev

ColdFusionを使用したクエリのパフォーマンス

分類Dev

クエリでのMySqlのパフォーマンスの問題

分類Dev

LEFTJOINとサブクエリを使用してPostgreSQLクエリのパフォーマンスを向上させる

分類Dev

RegexクエリのMongoDBパフォーマンスの問題

分類Dev

再帰クエリのパフォーマンスの問題

分類Dev

MongoDBクエリのパフォーマンスの問題

分類Dev

linqクエリのパフォーマンスの問題

分類Dev

DECENDANTS使用時のMDXクエリのパフォーマンスの問題

分類Dev

クエリに参加した単純な2つのテーブルでのMySQLのパフォーマンスの問題

分類Dev

最新の日付を見つけるためのサブクエリとの左側結合のパフォーマンスの問題

分類Dev

サブクエリを削除してクエリのパフォーマンスを向上させる

分類Dev

故障間の経過時間を見つけるためのクエリパフォーマンスの問題

分類Dev

複数の並列クエリを使用する場合のパフォーマンスの問題-SqlClient

分類Dev

1つのテーブルを使用した複数の選択クエリ(パフォーマンスの向上)

分類Dev

日付フィールドを使用した範囲クエリのクエリパフォーマンス

分類Dev

サブクエリと結合のパフォーマンス

分類Dev

動的フィールド挿入を使用したMySQLクエリのパフォーマンス

分類Dev

MATCH と SELECT を一緒に使用する場合のクエリ パフォーマンスの問題 OrientDB

分類Dev

連結とLIKEを使用したクエリのパフォーマンス

分類Dev

OR句を使用したSQLクエリのパフォーマンス

分類Dev

集計クエリでのMySQLViewのパフォーマンスの問題

分類Dev

「select」SQLiteリクエストのパフォーマンスの問題

分類Dev

多数のエントリを使用したSQLクエリのパフォーマンス?

分類Dev

NOTINクエリでのSparkパフォーマンスの問題

Related 関連記事

  1. 1

    サブクエリとGROUPBYを使用したMySQLSELECTのパフォーマンス

  2. 2

    Djangoクエリセットを使用したクエリ日付オブジェクトのパフォーマンスの問題があります

  3. 3

    SQL結合サブクエリの問題/パフォーマンス

  4. 4

    パフォーマンスの問題のクエリを特定する方法 - MYSQL

  5. 5

    数学計算を使用したクエリのパフォーマンスの問題

  6. 6

    ColdFusionを使用したクエリのパフォーマンス

  7. 7

    クエリでのMySqlのパフォーマンスの問題

  8. 8

    LEFTJOINとサブクエリを使用してPostgreSQLクエリのパフォーマンスを向上させる

  9. 9

    RegexクエリのMongoDBパフォーマンスの問題

  10. 10

    再帰クエリのパフォーマンスの問題

  11. 11

    MongoDBクエリのパフォーマンスの問題

  12. 12

    linqクエリのパフォーマンスの問題

  13. 13

    DECENDANTS使用時のMDXクエリのパフォーマンスの問題

  14. 14

    クエリに参加した単純な2つのテーブルでのMySQLのパフォーマンスの問題

  15. 15

    最新の日付を見つけるためのサブクエリとの左側結合のパフォーマンスの問題

  16. 16

    サブクエリを削除してクエリのパフォーマンスを向上させる

  17. 17

    故障間の経過時間を見つけるためのクエリパフォーマンスの問題

  18. 18

    複数の並列クエリを使用する場合のパフォーマンスの問題-SqlClient

  19. 19

    1つのテーブルを使用した複数の選択クエリ(パフォーマンスの向上)

  20. 20

    日付フィールドを使用した範囲クエリのクエリパフォーマンス

  21. 21

    サブクエリと結合のパフォーマンス

  22. 22

    動的フィールド挿入を使用したMySQLクエリのパフォーマンス

  23. 23

    MATCH と SELECT を一緒に使用する場合のクエリ パフォーマンスの問題 OrientDB

  24. 24

    連結とLIKEを使用したクエリのパフォーマンス

  25. 25

    OR句を使用したSQLクエリのパフォーマンス

  26. 26

    集計クエリでのMySQLViewのパフォーマンスの問題

  27. 27

    「select」SQLiteリクエストのパフォーマンスの問題

  28. 28

    多数のエントリを使用したSQLクエリのパフォーマンス?

  29. 29

    NOTINクエリでのSparkパフォーマンスの問題

ホットタグ

アーカイブ