次のような mysql クエリがある場合:
SELECT * FROM table1 WHERE id IN(1,2,3,4) LIMIT 2
mysql は、テーブルから ID 1 と 2 の行、または 1、2、3、4 の任意の 2 つのランダム ID の行を返しますか?
次のような mysql クエリがある場合:
SELECT * FROM table1 WHERE id IN(1,2,3,4) LIMIT 2
mysql は、テーブルから ID 1 と 2 の行、または 1、2、3、4 の任意の 2 つのランダム ID の行を返しますか?
テーブルの構造、レコードの順序、インデックスがわからないため、最終的な結果を予測できません。
ただし、この正確なクエリでは、奇妙なストレージエンジン(私が知っている一般的なmyslqエンジンではない)を楽しむためにランダム化しない限り、常に結果セットの最初の2つのレコードになります。テーブル構造またはレコードを変更しない限り、結果セットは常に同じである必要があります。クエリオプティマイザは、インデックスが変更されたり、それらのインデックスの相対的なカーダニティが変更されたりしない限り、常に同じように計画および実行します。
内で見つかった最初の2つのレコードを返しますが、IN
指定しない限りorder by
、注文の保証はありません。数は固定されてIN
おり(句からの一致数は制限されています(<=)LIMIT
句で指定された数です)、順序は固定されていません。さて、一般的にこれがあなたのテーブル「メイン」であるとしましょう
ID
1
3
2
4
このクエリ
select * from main where id in (1,2,3,4) limit 2
戻り値
1
3
これは、値がテーブルにどのように存在するかを示しているためです。これは、データが格納されている順序を返します(通常のMySQLシナリオの場合)。注文するとこれは
select * from main where id in (1,2,3,4) order by id limit 2
戻り値
1
2
最初に見つかった 2 つのレコードを、指定した間隔内の ID で返します。ただし、句を指定しない場合ORDER BY
、アイテムがその特定の順序でフェッチされるという保証はありません。