tencent cloud

TDSQL-C for MySQL

ページング順序保持機能

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-30 16:14:40
MySQLでは、データをクエリする際にorder by句を使用し、かつorder byフィールドに重複値が存在する場合、さらにlimit句を組み合わせてページングクエリを行うと、2ページ目のデータが1ページ目のデータと重複する問題が発生する可能性があります。これは、MySQLがソート時にヒープソートの方法を使用しているためです。ヒープソートは不安定なソート方法であり、重複値が存在する場合、出力結果が毎回一致しません。したがって、「order by ... limit ...」のシナリオを使用する際には、最適な解決策は「order by」のフィールドにインデックスが存在するようにすること、または「order by」のフィールドに他のフィールドを追加してデータの一意性を維持することです。
この問題に対し、読み取り専用分析エンジンではページング順序保持機能をサポートしています。これにより、ユーザーはこのようなシナリオにおいてデータベースの論理を考慮する必要がなく、従来のクエリ方法をそのまま使用してもorder by ... limit...の出力結果に重複が発生せず、順序の一貫性を確保できます。

実装原理

読み取り専用分析エンジンは、SQL実行でソートとページングを行うSQLシナリオにおいて、ビジネスソートロジックを確保した後、デフォルトで全量データに対して暗黙のソートを行います。これにより、Limit操作を使用する際に発生するデータ重複問題を回避できます。

順序保持シナリオ

order by句がなく、limit句だけがあるシナリオです。
order byフィールドに重複値が存在する場合、出力結果の一部のフィールドのみに対してソートが行われます。
サブクエリにはソートが含まれていますが、外側のクエリではソートが行われていません。

性能影響

ページング順序保持機能を有効にすると、追加的なソート操作が導入されるため、一部のクエリでパフォーマンスの低下が発生する可能性があります。業務の実際状況に基づき、ページングソート機能を使用するかどうかをご選択ください。

使用説明

ページング順序保持の有効化と使用方法の詳細については、ページング順序保持機能を参照してください。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック