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

このINNERJOIN/ ORDER BY mysqlクエリが非常に遅いのはなぜですか?

    ids.customer_id = customer.customer_idと入力するつもりだったと思います customer_ids.customer_idではありません)

    ORDER BYがない場合、mysqlはタイプ10(インデックス付き)の最初の10個のIDを取得し、それらの顧客を検索して完了しました。 (結合条件は両方のテーブルで一致する行にのみ適用されるため、ここでのLEFTJOINは実際にはINNERJOINであることに注意してください)

    ORDER BY mysqlは、おそらくすべてを取得しています。 type =10の顧客を名で並べ替えて、最初の10を見つけます。

    これを高速化するには、customersテーブルを非正規化する(タイプをcustomerレコードにコピーする)か、customer_id, name, typeを保持するマッピングテーブルを作成します。 タプル。いずれの場合も、(type, name)にインデックスを追加します 。マッピングテーブルを使用する場合は、それを使用して顧客とIDとの3方向結合を実行します。

    type =10がかなり一般的である場合は、クエリでcustomersテーブルを名前でウォークし、STRAIGHTJOINを使用してそれぞれのタイプを確認することもできます。複合インデックスほど高速ではありませんが、すべての一致をプルアップするよりも高速になります。

    上で提案したように、クエリでEXPLAINを実行して、mysqlが使用しているクエリプランを確認します。



    1. HTTPステータス500-java.lang.NoClassDefFoundError:OpenShiftでアプリを実行するときのjava / time /temporal / TemporalField

    2. 精度とスケールの違いは何ですか?

    3. Eclipseがデータ型テキストのデフォルトのマッピングタイプとしてオブジェクトを提案するのはなぜですか?

    4. PowerShellを使用してSQLServerの.csvからデータをインポートするにはどうすればよいですか?