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

どのMySQLクエリが高速ですか?

    常にEXPLAINを使用する必要があります クエリの実行方法を決定します。

    残念ながら、MySQLはサブクエリをDEPENDENT QUERYとして実行します。つまり、サブクエリは外部クエリの各行に対して実行されます。 MySQLは、サブクエリが相関サブクエリではないことを検出するのに十分スマートであり、1回だけ実行されると思いますが、残念ながら、まだそれほどスマートではありません。

    したがって、MySQLは学生のすべての行をスキャンし、各行に対してサブクエリを実行し、外部クエリのインデックスをまったく利用しません。

    クエリをJOINとして記述すると、MySQLでインデックスを利用できるようになり、次のクエリが最適な記述方法になります。

    SELECT COUNT(*) AS count
    FROMstudents s
    JOIN classes c
      ON c.id = s.classes_id
      AND c.departments_id = 1
    WHERE s.status = 1
    

    これは次のインデックスを利用します:

    students(`status`)
    classes(`id`, `departements_id`) : multi-column index
    


    1. 一般的なMySQLエラー:「通信パケットの読み取り中にエラーが発生しました」

    2. MySQLとSQLの違いは何ですか?

    3. PostgreSQLのクエリエラーによって結果が返されません

    4. OracleSQL-列の上位5つの値を取得する方法