INの代わりにINNERJOINを使用しても、MySQLクエリは非常に遅くなります

user3138073

product(10kレコード)、product_attribute(4kレコード)、product_value(2mレコード)の3つのテーブルがあります。productとproduct_attributeは、product_valueを介して接続されます。特定の製品(たとえば、product_id = 001)と、それぞれの属性名および属性値を取得したいと思います。最初はやってみます

SELECT product.product_id, product_attribute.attribute_name, product_value.attribute_value

FROM product, product_attribute, product_value

WHERE product.product_id = 001 AND product.product_id = product_value.product_id AND product_attribute.product_attribute_id IN (SELECT product_value.product_attribute_id FROM product_value WHERE product_value.product_id = 001)

しかし、それは非常に遅いです。それから私はINNER JOIN代わりに使用しましたIN

SELECT product.product_id, product_attribute.attribute_name,  product_value.attribute_value FROM product

INNER JOIN product_value ON product.product_id = 001 AND product.product_id = product_value.product_id

INNER JOIN product_attribute ON product_attribute.product_attribute_id = product_value.product_attribute_id WHERE product.product_id = 001

しかし、それでも非常に遅いです。クエリは36分で31行を返します。

この問題に対するより良い解決策はありますか?

クエリを説明すると、次のようになります。

*************************** 1. row ***********
           id: 1
  select_type: SIMPLE
        table: product_attribute
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 5247
        Extra:
*************************** 2. row ***********
           id: 1
  select_type: SIMPLE
        table: product
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 91818
        Extra: Using where; Using join buffer
*************************** 3. row ***********
           id: 1
  select_type: SIMPLE
        table: product_value
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1731016
        Extra: Using where; Using join buffer
Saharsh Shah

これを試して:

SELECT p.product_id, pa.attribute_name, pv.attribute_value 
FROM product p 
INNER JOIN product_value pv ON p.product_id = pv.product_id
INNER JOIN product_attribute pa ON pa.product_attribute_id = pv.product_attribute_id 
WHERE p.product_id = 001

このクエリを実行し、それでもクエリに直面している場合はEXPLAIN、上記のクエリの計画を追加するよりも遅い

パフォーマンスを向上させるには、列にINDEXを作成する必要があります。

  1. テーブルのproduct_id列にインデックスを作成しproduct_valueます

  2. テーブルのproduct_attribute_id列にインデックスを作成しproduct_valueます

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

MySQLの大量のINNERJOINクエリにより応答が遅くなります

分類Dev

Electronを使用している間、MongoDb接続の初期化とクエリは非常に遅くなります

分類Dev

単純なコマンドを使用しても、Dockerのビルドは非常に遅くなります

分類Dev

:jsonb?&演算子を使用すると、クエリが非常に遅くなります

分類Dev

Eloquent whereNotInを使用すると、クエリが非常に遅くなります

分類Dev

このクエリは、最初に変数を宣言した場合よりも遅くなりますか?

分類Dev

sqliteはインデックスを使用してもクエリを非常に遅くします

分類Dev

2つの非常に高速で単純なクエリは、マージすると非常に遅くなります

分類Dev

ハードコードされた整数値と比較して、整数変数を使用する場合、Linq toSQLクエリは非常に遅くなります

分類Dev

KSQLクエリは私のリクエストにあまりにも多くの遅延を追加します

分類Dev

サブクエリを使用したクエリは、サブクエリの代わりに固定データを使用した同じクエリよりも長くする必要があります

分類Dev

たくさんのクエリを書く代わりに、もっとエレガントな方法はありますか?

分類Dev

format date関数を使用すると、SQLクエリの実行が非常に遅くなります

分類Dev

mysqlの代わりにPDOクエリを使用する、つまり非推奨

分類Dev

別のWHEREパラメータを追加した後、PHPMysqlクエリが非常に遅くなります

分類Dev

MySQLクエリは、ORDERBYフィールドDESCおよびLIMITを使用している場合にのみ遅くなります

分類Dev

eclipselink jpaは、COUNT(*)の代わりにCOUNT(id)を使用してカウントクエリを生成します

分類Dev

Android:HttpUrlConnectionは(GETの代わりに)POSTを使用してリクエスト本文を送信します

分類Dev

MYSQLクエリはPHPを使用すると非常に遅くなりますが、phpMyAdminとコマンドラインでは高速です

分類Dev

MDXクエリは、SSISデータフロータスクを介してロードするときに非常に遅くなります

分類Dev

`database / sql`を使用したクエリは、データベースを直接クエリするよりも大幅に遅くなります

分類Dev

私のスクリプトは有効なリンクの代わりに JavaScript のものを生成します

分類Dev

結果の各行に対してCOUNT(id)を実行しようとすると、クエリが非常に遅くなります

分類Dev

ElasticsearchはANDクエリの代わりにORクエリを作成します

分類Dev

nullの代わりに何も返さないようにsqliteselectクエリを強制します

分類Dev

余分なmatch句を使用すると、neo4jクエリが非常に遅くなります

分類Dev

Wordpressのカスタムメタクエリ検索は、OR関係にあると非常に遅くなります

分類Dev

FutureWarning:pandas.util.testingは非推奨になりました。代わりに、pandas.testingのパブリックAPIの関数を使用してください

分類Dev

NgbModalは、同じモーダルを何度も使用した後、応答が非常に遅くなります

Related 関連記事

  1. 1

    MySQLの大量のINNERJOINクエリにより応答が遅くなります

  2. 2

    Electronを使用している間、MongoDb接続の初期化とクエリは非常に遅くなります

  3. 3

    単純なコマンドを使用しても、Dockerのビルドは非常に遅くなります

  4. 4

    :jsonb?&演算子を使用すると、クエリが非常に遅くなります

  5. 5

    Eloquent whereNotInを使用すると、クエリが非常に遅くなります

  6. 6

    このクエリは、最初に変数を宣言した場合よりも遅くなりますか?

  7. 7

    sqliteはインデックスを使用してもクエリを非常に遅くします

  8. 8

    2つの非常に高速で単純なクエリは、マージすると非常に遅くなります

  9. 9

    ハードコードされた整数値と比較して、整数変数を使用する場合、Linq toSQLクエリは非常に遅くなります

  10. 10

    KSQLクエリは私のリクエストにあまりにも多くの遅延を追加します

  11. 11

    サブクエリを使用したクエリは、サブクエリの代わりに固定データを使用した同じクエリよりも長くする必要があります

  12. 12

    たくさんのクエリを書く代わりに、もっとエレガントな方法はありますか?

  13. 13

    format date関数を使用すると、SQLクエリの実行が非常に遅くなります

  14. 14

    mysqlの代わりにPDOクエリを使用する、つまり非推奨

  15. 15

    別のWHEREパラメータを追加した後、PHPMysqlクエリが非常に遅くなります

  16. 16

    MySQLクエリは、ORDERBYフィールドDESCおよびLIMITを使用している場合にのみ遅くなります

  17. 17

    eclipselink jpaは、COUNT(*)の代わりにCOUNT(id)を使用してカウントクエリを生成します

  18. 18

    Android:HttpUrlConnectionは(GETの代わりに)POSTを使用してリクエスト本文を送信します

  19. 19

    MYSQLクエリはPHPを使用すると非常に遅くなりますが、phpMyAdminとコマンドラインでは高速です

  20. 20

    MDXクエリは、SSISデータフロータスクを介してロードするときに非常に遅くなります

  21. 21

    `database / sql`を使用したクエリは、データベースを直接クエリするよりも大幅に遅くなります

  22. 22

    私のスクリプトは有効なリンクの代わりに JavaScript のものを生成します

  23. 23

    結果の各行に対してCOUNT(id)を実行しようとすると、クエリが非常に遅くなります

  24. 24

    ElasticsearchはANDクエリの代わりにORクエリを作成します

  25. 25

    nullの代わりに何も返さないようにsqliteselectクエリを強制します

  26. 26

    余分なmatch句を使用すると、neo4jクエリが非常に遅くなります

  27. 27

    Wordpressのカスタムメタクエリ検索は、OR関係にあると非常に遅くなります

  28. 28

    FutureWarning:pandas.util.testingは非推奨になりました。代わりに、pandas.testingのパブリックAPIの関数を使用してください

  29. 29

    NgbModalは、同じモーダルを何度も使用した後、応答が非常に遅くなります

ホットタグ

アーカイブ