ホームページ  >  記事  >  データベース  >  MySQL で大規模な選択をチャンクごとに取得しますか?

MySQL で大規模な選択をチャンクごとに取得しますか?

王林
王林転載
2023-09-02 22:21:10764ブラウズ

在 MySQL 中按块检索大的选择?

大規模な選択範囲を分割して取得するには、ORDER BY LIMIT を使用する必要があります。構文は次のとおりです。

SELECT *FROM yourTableName ORDER BY yourColumnName LIMIT 0,10;

上記の構文により、テーブルから 10 行が取得されます。上記の構文では、0 はテーブルの結果セットの最初の行を表し、0 から始まるインデックスが付いていることを意味します。 LIMIT の 2 番目の値は、テーブルから取得できる最大行数を表します。

10 ~ 30 以降の行を取得する場合は、LIMIT で次の構文を使用します。

SELECT *FROM yourTableName ORDER BY yourColumnName LIMIT 10,20; //11 to 30

30 ~ 50 の別の行セットが必要な場合は、再度 LIMIT を使用します。

SELECT *FROM yourTableName ORDER BY yourColumnName LIMIT 30 ,20; 31 to 50.

これには、一時テーブルを使用する必要があります。構文は次のとおりです。

DROP TEMPORARY TABLE IF EXISTS yourTemporaryTableName;
CREATE TEMPORARY TABLE yourTempTableName
AS
(
   SELECT *FROM yourOriginalTableName
   ORDER BY
   LIMIT 0,100
);

すべてのレコードが一時テーブルにある場合は、上で説明したように LIMIT を使用して、一時テーブルからすべてのレコードを取得します。

SELECT *FROM yourTemporaryTableName LIMIT 0,100;
SELECT *FROM yourTemporaryTableName LIMIT 100,1000;

次に、制限値を設定するのはあなたです。ここで一時テーブルを削除することをお勧めします。クエリは次のとおりです。

DROP TEMPORARY TABLE yourTemporaryTableName;

上記の説明を示します。まずテーブルを作成します。テーブルを作成するクエリは次のとおりです。

mysql> create table getRecordsDemo
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (1.68 sec)

insert コマンドを使用して、いくつかのレコードをテーブルに挿入します。クエリは次のとおりです。

mysql> insert into getRecordsDemo values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),();
Query OK, 738 rows affected (0.34 sec)
Records: 738 Duplicates: 0 Warnings: 0

次に、上記のテーブルのような一時テーブルを作成します。一時テーブルを作成するクエリは次のとおりです。

mysql> drop temporary table if exists TempRecord;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create temporary table TempRecord
   -> as
   -> (
   -> select * from getRecordsDemo order by Id limit 0,738
   -> );
Query OK, 738 rows affected (0.03 sec)
Records: 738 Duplicates: 0 Warnings: 0

これで、LIMIT 句を使用して結果をチャンクで取得できるようになります。

ケース 1: 次のクエリは、一時テーブル 'TempRecord' からいくつかのレコードを取得するために使用されます:

mysql> select *from TempRecord limit 0,10;

以下は出力です:

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
+----+
10 rows in set (0.00 sec)

ケース 2: 次のようなクエリを実行して次のレコード セットを取得します。

mysql> select *from TempRecord limit 10,20;
+----+
| Id |
+----+
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |
+----+
20 rows in set (0.00 sec)

ケース 3: 次のようなクエリを実行して別のレコード セットを取得します:

rreeee

以上がMySQL で大規模な選択をチャンクごとに取得しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。