ホームページ >データベース >mysql チュートリアル >MySQL から最後の N 行を昇順で効率的に取得するにはどうすればよいですか?

MySQL から最後の N 行を昇順で効率的に取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-13 16:53:15987ブラウズ

How to Efficiently Retrieve the Last N Rows from MySQL in Ascending Order?

MySQL から最後の N 行を昇順で取得する

MySQL データベースから最後の N 行を取得することは、特に、一般的なタスクになる可能性があります。大きなテーブルを操作する場合。ただし、データの整合性を確保しながら結果を昇順に並べるのは困難になる可能性があります。

次のクエリを考えてみましょう:

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

一見すると、このクエリは選択しているように見えます。最後の 50 行。ただし、これは降順 (最大値から最小値へ) で行われるため、昇順の要件に違反します。

別のアプローチは次のとおりです。

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

このクエリは、ID を持つ行を取得することを目的としています。最大 ID から 50 を引いた値より大きい値です。ただし、データが操作される可能性があり、行が削除される可能性があるため、失敗する可能性があり、

解決策: サブクエリのアプローチ

これらの課題に対処するには、サブクエリを使用できます。

SELECT * FROM
(
 SELECT * FROM table ORDER BY id DESC LIMIT 50
) AS sub
ORDER BY id ASC;

このクエリには、次のサブクエリが含まれています。最後の 50 行を降順で選択します。このサブクエリの結果は、「sub」と呼ばれる一時テーブルに保存されます。最後に、外側のクエリは「sub」からすべての行を選択し、それらを昇順に並べます。

このアプローチでは、テーブルが操作されている場合でも、最後の 50 行が確実に選択され、結果が昇順で表示されます。注文します。

以上がMySQL から最後の N 行を昇順で効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。