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

MySQL:IN句の5番目のIDがクエリプランを大幅に変更するのはなぜですか?

    示したように、MySQLには、ORDER BY ... LIMIT nを使用したクエリ用の2つの代替クエリプランがあります。 :

    1. 修飾するすべての行を読み取り、並べ替えて、 nを選択します 一番上の行。
    2. 並べ替えられた順序で行を読み取り、 nで停止します 適格な行が見つかりました。

    どちらがより良いオプションであるかを決定するために、オプティマイザはWHERE条件のフィルタリング効果を推定する必要があります。これは、特にインデックスが作成されていない列や、値が相関している列の場合、簡単ではありません。あなたの場合、オプティマイザーが期待したものよりも最初の25の適格な行を見つけるために、ソートされた順序でテーブルの多くを読み取る必要があるでしょう。

    5.6の新しいリリース(GAより前のリリースで実行しています!)と新しいリリース(5.7、8.0)の両方で、LIMITクエリの処理方法にいくつかの改善がありました。それ以降のリリースにアップグレードして、これがまだ問題であるかどうかを確認することをお勧めします。

    一般に、クエリプランナーの決定を理解したい場合は、クエリのオプティマイザートレースを確認する必要があります。



    1. PostgreSQLでの低レベルのリソースプーリングに関するいくつかのアイデア

    2. MySQLの値にキャリッジリターンを追加するにはどうすればよいですか?

    3. Oracle DBにペルシア文字を挿入すると、疑問符が表示されます

    4. MySQLのクエリによって返される各行のストアドプロシージャを呼び出す