ちょっと、私はSQL_BIG_SELECTSを調査してきましたが、これまでのところ、MySQLのドキュメントはあまり役に立ちませんでした。以下のようなエラーが表示されないようにするための洞察を探しています。
エラー1104:SELECTで調べられるレコードが多すぎるため、おそらく非常に長い時間がかかります。 SELECTに問題がない場合は、WHEREを確認し、SET OPTION SQL_BIG_SELECTS = 1を使用してください。
前もって感謝します!
MySQLは、 'max_join_size'の値に基づいて、クエリが '大きな選択'かどうかを判断します。クエリがこの行数よりも多くを調べる必要がある場合、クエリは「大きな選択」と見なされます。最大結合サイズの値を表示するには、「変数の表示」を使用します。
索引付け、特にwhere句を使用すると、この問題の発生を防ぐことができると思います。
SQL_BIG_SELECTSは、ユーザーが過度に大きなクエリを誤って実行するのを防ぐために使用されます。 mysql.cnfでONに設定するか、起動時にコマンドラインオプションを使用してもかまいません。
SQL_BIG_SELECTSは、my.cnfまたはサーバーの起動時に設定できます。 SET SESSION SQL_BIG_SELECTS=1
を使用して、セッションごとに設定することもできます。
考えられることではありません。クエリをチェックして、本当に使用する必要があることを確認します。サーバーではデフォルトで有効になっており、max_join_sizeは非常に大きいです。
あなたはできません設定 SQL_BIG_SELECTS
my.cnfまたはサーバーの起動時。これはセッションのみのパラメーターであるためです。 MySQL 5.0.60を使用しています。
誰かが以前に投稿したことがあるように、サーバーの起動時にmy.cnfにSQL_BIG_SELECTSを設定することはできません。この種類の変数はそれをサポートしていません。
この厄介なエラーを示すSymfonyアプリケーションで同じ問題が発生しました:
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
しかし、varialbeの数を増やすことができます
sql_big_selectsに関連するmax_join_size
権限のあるmysqlユーザーとしてコマンドを実行することで修正できました。
# SET GLOBAL max_join_size=18446744073709551615;
または、max_join_sizeが構成ファイルで設定できるため、my.cnfに含めることができます
まあ、これが他の誰かを助けることを願っています。
私はデータベースに2000kを超えるレコードがあり、私のクエリは、特定のフィールドの重複の削除と更新の徹底的な比較を伴う大規模な選択でした...mysql
(回答日の現在のバージョン) index
句に含まれる2つのフィールドでwhere
を使用することになりました...これは他の人にも役立つはずです...
HTH
次のコマンドは私のために働きます
SET GLOBAL max_join_size=18446744073709551615;
しかし、コマンドの代わりにmy.cnfファイルに何を入れる必要がありますか?ところで、「5.6.12 MySQL Community Server」を使っています