次のクエリを使用して、2 つの列で順序付けされた DB をクエリしています。
Table1 から a、b、c を選択 a asc、b asc で並べ替える。
私の質問は、ソートが(標準によって)安定していることが保証されているかどうかです。安定じゃなくても意味ないけどネットで読んだので聞いてみた
標準は、安定ソートの使用を妨げませんが、それを要求しません。
次のクエリを使用して、2 つの列で順序付けされた DB をクエリしています。
Table1 から a、b、c を選択 a asc、b asc で並べ替える。
私の質問は、ソートが(標準によって)安定していることが保証されているかどうかです。安定じゃなくても意味ないけどネットで読んだので聞いてみた
標準は、安定ソートの使用を妨げませんが、それを要求しません。
ソートは安定しているとは限りません。SQL Serverのドキュメントには、安定した並べ替えを実現する方法についての適切な説明があると思います。
OFFSETとFETCHを使用してクエリ要求間で安定した結果を得るには、次の条件を満たす必要があります。クエリで使用される基になるデータは変更しないでください。つまり、クエリによって処理された行が更新されないか、クエリからのページに対するすべての要求が、スナップショットまたはシリアル化可能なトランザクション分離を使用して単一のトランザクションで実行されます。これらのトランザクション分離レベルの詳細については、SET TRANSACTION ISOLATION LEVEL(Transact-SQL)を参照してください。ORDER BY句には、一意であることが保証されている列または列の組み合わせが含まれています。
ソートが安定していないことを理解する最も簡単な方法は、テーブルの定義に戻ることです。SQLでは、テーブルは本質的に順序付けされていません。したがって、「安定性」に頼る命令はありません。
2番目の考慮事項として、ソートは並行して実装できます。ほとんどの並列ソートでは、共通キーは元の順序に関する情報なしでまとめられます(明示的または暗黙的にソートキーに実装されている場合を除く)。