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

MySQL 5.7 RAND()およびIF()をLIMITなしにすると、予期しない結果が発生します

    この問題は、MySQL 5.7で導入された(サブ)クエリの派生テーブルの処理方法の変更が原因で発生します。
    基本的に、パフォーマンスを最適化するために、一部のサブクエリが異なる時間や複数回実行され、予期しない結果が発生します。サブクエリが非決定論的な結果を返したときの結果(私の場合はRAND() )。
    MySQLにこれらのサブクエリを「具体化」(つまり、決定論的な結果を返す)させるための2つの簡単な(そして同様に醜い)回避策があります。LIMIT <high number>を使用します。 またはGROUP BY id どちらもMySQLにサブクエリを実体化し、期待される結果を返すように強制します。
    最後のオプションは、derived_mergeをオフにすることです。 optimizer_switchで 変数:derived_merge=off (他のすべてのパラメーターはそのままにしておいてください)。

    詳細情報:
    https://mysqlserverteam.com/duced -tables-in-mysql-5-7 /
    MySQL 5.7 /8.0とMySQL5.6で繰り返し選択されるたびに、サブクエリのrand()列が再評価されました




    1. 顧客の複数のアドレスとデフォルトアドレスのMySQLデータベース設計

    2. MySQLでSTRAIGHT_JOINを使用する場合

    3. エラーの修正方法:プラグイン「Aria」が原因で、XamppでMySQLが予期せずシャットダウンしました

    4. 古いサーバーから新しいサーバーにすべてのMySQLデータベースを転送する方法