SQLステートメントをラップするアプリケーション(MapServer- http://mapserver.org/)を使用しているため、ORDER BYステートメントは内部クエリにあります。例えば
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
アプリケーションには、さまざまなデータベースドライバーがあります。主にMS SQL ServerドライバーとSQL Server 2008を使用しています。サブクエリでORDER BYが見つかった場合、エラーがスローされます。
MSドキュメントから(これはSQL Server 2000の場合ですが、まだ適用されているようです):
ビュー、インライン関数、派生テーブル、またはサブクエリでORDER BY句を使用する場合、順序付けされた出力は保証されません。代わりに、ORDER BY句は、Top演算子によって生成される結果セットの構成が一貫していることを保証するためにのみ使用されます。ORDER BY句は、最も外側のSELECTステートメントで指定されている場合にのみ、順序付けされた結果セットを保証します。
ただし、Postgres(9)およびOracleで実行した場合、同じタイプのクエリが結果を返します-サブクエリで定義された順序で。Postgresでは、クエリプランは結果がソートされていることを示し、Postgresのリリースノートには、サブクエリの順序が使用されることを意味する項目が含まれています。
サブクエリORDER BYが上位クエリと一致する場合はソートを回避
http://en.wikipedia.org/wiki/Order_byの状態:
一部のデータベースシステムでは、副選択またはビュー定義でORDER BY句を指定できますが、そこに存在しても効果はありません。
ただし、クエリプランの私自身のチェックから:
- SQL Server 2008はサブクエリでのORDER BYをサポートしていません
- Postgres 9はサブクエリでのORDER BYをサポートしています
- Oracle 10gはサブクエリでのORDER BYをサポートします
だから私の質問は、PostgresとOracleがサブクエリでの並べ替えを許可していないことを正式に確認または否定できるリンクはありますか?
ORDER BY
、サブクエリ内のが冗長であると識別され、不必要なソートが行われなくなります。