sql >> データベース >  >> RDS >> Sqlserver

OrderBy句のないSQLSelectステートメントの順序

    いいえ、その動作は信頼できません。順序は、クエリプランナーが結果セットを構築することを決定した方法によって決定されます。 select * from foo_tableのような単純なクエリ ディスクに保存されている順序で返される可能性があります。これは、主キーの順序、作成された順序、またはその他のランダムな順序である可能性があります。 select * from foo where bar < 10などのより複雑なクエリ 代わりに、読み取られたインデックスに基づいて、またはテーブルスキャンの場合はテーブルの順序に基づいて、別の列の順序で返される場合があります。複数のwhereを使用した、さらに複雑なクエリ 条件、group by 句、union s、プランナーが生成するのに最も効率的であると判断した順序になります。

    これらのクエリ間でデータが変更されたという理由だけで、2つの同一のクエリ間で順序が変更されることもあります。 「where」句は1つのクエリのインデックススキャンで満たされる場合がありますが、後で挿入するとその条件の選択性が低下し、プランナーはテーブルスキャンを使用して後続のクエリを実行することを決定できます。

    その上に細かい点を置くために。 RDBMSシステムには、正確に提供する権限があります。 可能な限り効率的に、あなたが求めたもの。その効率は、IOの最小化(ディスクとネットワーク経由の両方でデータを送信する)、CPUの最小化、ワーキングセットのサイズの小型化(最小限の一時ストレージを必要とする方法を使用)など、さまざまな形をとることができます。

    ORDER BYなし 条項、あなたは正確に尋ねていないでしょう 特定の順序の場合、RDBMSは、RDBMSがデータを最速で生成すると予想するアルゴリズムに基づいて、クエリの偶然の側面に(おそらく)対応する順序でこれらの行を提供します。

    効率を気にするが注文は気にしない場合は、ORDER BYをスキップしてください 句。注文は気になるが効率は気にならない場合は、ORDER BYを使用してください 条項。

    あなたは実際に両方を気にしているので ORDER BYを使用する 次に、クエリとデータベースを慎重に調整して、効率的にします。



    1. SQL Server(T-SQL)で現在のログイン名を返す

    2. 10進時間を時間と分に変換する

    3. SQLステートメントを引数可能にする理由は何ですか?

    4. JSONのPostgreSQLインデックス