2011-12-23 10 views
5

私は、PKクラスタ化インデックスとその上の他のインデックス(ユニークでもユニークでもない)を持つテーブルを持っています。私は(正確に)発行する場合:ソートなしWHERE ORDER BY句の結果の並び順

SELECT * FROM table_name 

または行が返されますどのような順序で

SELECT col1, col2 FROM table_name 

これは、お客様から転送されたインタビューアンケートの最初の質問です。手順は次のとおりです。

この質問に対する回答が間違っている場合は、すぐにインタビューを終了してください。明示された能力にかかわらず、個人はSQLベースのリレーショナルデータベース管理システムを理解していません。これは過去25年以上にわたってSQL-101ロジックです。正解は、「ORDER BY句がクエリの一部として指定されていないため、不明/ランダム/不定」です。

私は何とかこれが実際に正しいと確信していません。すべてのコメントは大歓迎です。

おかげで、

ラジ

答えて

8

は、表に主キー/クラスタ化インデックスを持っている場合でも、あなたは、行の順序について確認することはできません。実行計画では、最後にインデックス/ヒープスキャンが行われますが、多くのコアでクエリが並行して実行されると、パラレルストリームのマージプランステップにより結果のデータセットはソートされません。

小さなデータベースでは表示されませんが、別のハードドライブに多数のファイルを作成して、マルチコアマシンで簡単なクエリを実行してみてください。ほとんどの場合、結果はIDによって部分的にソートされます。つまり、行がソートされるブロックがありますが、ブロックはセミランダムな順序で取得されます。

+1

+1また、一部の条件で割り振り順序スキャンを取得することも、SQL Serverで高度なスキャン/メリーゴーラウンドスキャン機能を使用することもできます。 [この回答を見る](http://stackoverflow.com/questions/7116004/guarantee-order-of-table-valued-function-results/7117186#7117186) –

5

命令は、問合せの結果が関係であり、関係が順序付けられていない概念レベルでSQLと話します。概念的なものから実際のものへと移行すると、暗黙的な順序付けがSQL標準で定義されていない理由はRDBMSが実装にとって最も効率的な順序を自由に返すためです。

関連する問題