2

次のような mysql クエリがある場合:

SELECT * FROM table1 WHERE id IN(1,2,3,4) LIMIT 2

mysql は、テーブルから ID 1 と 2 の行、または 1、2、3、4 の任意の 2 つのランダム ID の行を返しますか?

4

3 に答える 3

1

テーブルの構造、レコードの順序、インデックスがわからないため、最終的な結果を予測できません。

ただし、この正確なクエリでは、奇妙なストレージエンジン(私が知っている一般的なmyslqエンジンではない)を楽しむためにランダム化しない限り、常に結果セットの最初の2つのレコードになります。テーブル構造またはレコードを変更しない限り、結果セットは常に同じである必要があります。クエリオプティマイザは、インデックスが変更されたり、それらのインデックスの相対的なカーダニティが変更されたりしない限り、常に同じように計画および実行します。

于 2012-10-31T11:25:06.400 に答える
0

内で見つかった最初の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
于 2012-10-31T11:29:34.113 に答える
0

最初に見つかった 2 つのレコードを、指定した間隔内の ID で返します。ただし、句を指定しない場合ORDER BY、アイテムがその特定の順序でフェッチされるという保証はありません。

于 2012-10-31T11:27:27.487 に答える