DB2は主キーでデータを並べ替えますか


8

列順が主キーと同じだったのでプロダクションクエリからorder by句を削除しようとしている同僚と最近話し合いをしました。

彼が主キーに基づく順序を保証できないことを説明しようとした長い議論の後、最終的な結論は、MSSQLクエリの変更を要求するつもりはないということでした。
しかし、彼はまだDB2クエリを変更する予定でした。

DB2が主キーでクエリを順序付けすることを証明する記事はすぐには見つかりませんでした。現在、それがそうであるかどうか疑問に思っています。

だから私の質問は、order by句がない場合、DB2はどのようにクエリを並べ替えるのですか?主キーを使用していますか?
並列システムで、order by句なしでデータが正しく順序付けられて出力されることをどのように保証できますか?

回答:


18

いいえ、あなたの同僚は間違っています。

すべてのSQL proroducts(SQL標準に従って動作するDBMS)は、クエリにがない限りORDER BY、クエリ出力の結果がどのように並べられるかを保証しません。

IBM DB2のドキュメントは言及します

言語要素で説明されている比較規則に従って順序付けが実行されます。null値は他のすべての値よりも高くなります。順序指定で完全な順序が決定されない場合、最後に識別された並べ替えキーの値が重複する行の順序は任意です。を指定しない場合ORDER BY、結果テーブルの行は任意の順序になります。


「SQL標準で動作する場合」は、IBMがFTWをドキュメント化している場合に重要です。
WernerCD、2014

@WernerCDどのDBMSも標準に100%準拠していません(そのバージョンは多数あります)。しかし、彼らは多くの部分に準拠していると主張しています。私は、少なくともそれらが異なる場所にあると期待しています。
ypercubeᵀᴹ

ええ、そういうわけで私は「標準」よりもIBMのドキュメントに対して+1でした。「期待された」対「実際の」は、あなたをケイスターで噛むことができます。
WernerCD、2014

11

ypercubeの回答で指摘されているように、句がないORDER BY場合、定義された順序はありません

追加したいのは、SQLは非常に抽象的であり、DBMSが実行することを段階的に指定するのではなく、最終結果の要件を指定することを理解することが重要です。

これは、正しい順序を保証する方法でデータが既に検索されている場合、DBMSがそのような戦略を決定したためであり、ORDER BY句の要件を満たすために追加の並べ替え作業は不要であることをすでに知っているためです。。

一方、順序が重要であると指定しなかった場合(実際には重要ですか?)、DBMSはこれを考慮に入れ、適切なデータを見つけるのにより効率的な別の戦略を見つけた場合、他のいくつかの注文は、どうやら注文を気にしなかったという事実を利用します。(選択した戦略は、関連するテーブル、ソフトウェアパッチなどのデータ量の増加に基づいて、時間とともに非常によく変化する可能性があります。)

つまり、ORDER BY句を削除してもメリットはごくわずか(クエリサイズがわずかに小さい)ですが、順序が実際に重要である場合は、大きなデメリットになる可能性があります。特に、これはテストデータセットで非常にうまく機能し、受け入れテストを通過して、深刻な問題を引き起こす可能性があるためです。


1
彼が導入シートで述べた理由は、「順序付けはCPUリソースを消費していますが、順序はすでに主キーによって暗示されています」。これは私には非常に間違っているように聞こえました(これまでの回答で証明されています)
Reaces 14

@Reaces DB2はデフォルトで「ヒープ」テーブルを使用しますか、それともクラスター化インデックスを備えたSQL Serverに似ていますか?答えは変わりませんが、証明が容易になる可能性があります:)
topanswers.xyzを試してみてください

@Jack Douglas、SQL ServerとDB2でのクラスタリングは異なる概念です。このスレッドで、SQLサーバーのクラスタリングについて多くのことを学びました:groups.google.com/d/msg/comp.databases.ms-sqlserver/P7Wcs4NcF4s/…。私はSQLサーバーに精通していますが、DB2には精通していません。
Lennart、2014

クラスタリングインデックスが指定されていない限り、DB2の@Reacesテーブルは通常、デフォルトで主キーに「クラスター化」されます。
Chris Aldrich

1
@ChrisAldrich-このステートメントは、z / OS上のDB2にのみ当てはまります。
mustaccio 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.