タグ付けされた質問 「order-by」

クエリ結果をソートするためにSQL SELECTステートメントで使用される句。


7
ORDER BYがビューに属さないのはなぜですか?
私はあなたが視野に入れないことを理解し ています 。(少なくとも私が作業しているSQL Server 2012では) ORDER BY また、ビューを並べ替える「正しい」方法は、ビューを照会するステートメントをORDER BY囲むSELECTことです。 しかし、実用的なSQLとビューの使用法が比較的新しいので、なぜこれが設計によって行われるのかを理解したいと思います。履歴を正しく追跡していれば、これはかつて可能であり、SQL Server 2008などから明示的に削除されました(正確なバージョンについては引用しないでください)。 ただし、Microsoftがこの機能を削除した理由について私が思い付くことができる最も良い理由は、「ビューはデータの並べ替えられていないコレクション」だからです。 ビューをソートしない理由に関して、論理的で適切な理由があると思います。ビューが単なるフラット化されたデータのコレクションになれないのはなぜですか?なぜ特別に未ソートなのですか?ソートされたビューを持つことは完全に直感的であると思われる状況(少なくとも私にとって/ IMHO)を思い付くのはそれほど難しくないようです。

2
MySQLのORDER BY FIELD()は内部的にどのように機能しますか
ORDER BY句の仕組みとFIELD()機能の仕組みを理解しています。私が理解したいのは、両者がどのように連携してソートするかです。行の取得方法とソート順の導出方法 +----+---------+ | id | name | +----+---------+ | 1 | stan | | 2 | kyle | | 3 | kenny | | 4 | cartman | +----+---------+ SELECT * FROM mytable WHERE id IN (3,2,1,4) ORDER BY FIELD(id,3,2,1,4) 上記のクエリの結果は +----+---------+ | id | name | +----+---------+ | …
37 mysql  order-by  fields 

2
列ごとの順序にはインデックスが必要ですか?
結果の検索に使用されるインデックスをテーブルに追加しました。ASCまたはDESCの順序で結果を表示しています。その列にはインデックスが必要ですか?そのテーブルにはさらに2つのインデックスがあります。その列にインデックスを作成するかどうかによって、パフォーマンスはどのように影響しますか?

6
テーブル内の任意のレコードの順序付け
データベースを使用する際の一般的なニーズは、レコードに順番にアクセスすることです。たとえば、ブログがある場合、ブログの投稿を任意の順序に並べ替えることができます。これらのエントリには多くの場合、多くの関係があります。そのため、リレーショナルデータベースは理にかなっているようです。 私が見た一般的な解決策は、整数列を追加することですorder: CREATE TABLE AS your_table (id, title, sort_order) AS VALUES (0, 'Lorem ipsum', 3), (1, 'Dolor sit', 2), (2, 'Amet, consect', 0), (3, 'Elit fusce', 1); 次に、行を並べ替えorderて適切な順序で並べます。 しかし、これは不器用なようです: レコード0を先頭に移動する場合は、すべてのレコードを並べ替える必要があります 真ん中に新しいレコードを挿入したい場合は、その後のすべてのレコードを並べ替える必要があります レコードを削除する場合は、それ以降のすべてのレコードを並べ替える必要があります 次のような状況は簡単に想像できます。 2つのレコードは同じです order orderレコード間にギャップがあります これらは、いくつかの理由でかなり簡単に発生する可能性があります。 これは、Joomlaなどのアプリケーションがとるアプローチです。 ここでのインターフェイスは悪いと主張し、人間が直接数字を編集する代わりに、矢印またはドラッグアンドドロップを使用する必要があります。おそらく正しいでしょう。しかし、舞台裏では、同じことが起こっています。 一部の人々は、「2.5」を使用して順序2と3のレコードの間にレコードを挿入できるように、10進数を使用して順序を格納することを提案しています。そして、それは少し助けにはなりますが、奇妙な小数(どこで止まりますか?2.75?2.875?2.8125?) 注文をテーブルに保存するより良い方法はありますか?

6
データベースに暗黙的な順序がないことを証明する方法は?
最近、たとえば、時間順にデータを並べ替える必要がある場合に、データベーステーブル内のデータを並べ替える列を持つことの重要性を同僚に説明していました。これは、クエリを一見無限に再実行でき、常に同じ順序で同じ行セットを返すため、やや難しいことがわかりました。 これに気づいたことがありますが、実際にできることは、データベーステーブルが従来のCSVファイルまたはExcelファイルのように動作することを単純に想定するのではなく、彼らが私を信頼していると主張することだけです。 たとえば、(PostgreSQL)クエリの実行 create table mytable ( id INTEGER PRIMARY KEY, data TEXT ); INSERT INTO mytable VALUES (0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'); 明確な概念的順序でテーブルを作成します。同じデータを最も簡単な方法で選択すると、次のようになります。 SELECT * FROM mytable; 常に次の結果が得られます。 id | data ----+------ 0 | …

3
親子ツリー階層順序
SQL Server 2008 R2のデータをフォローする必要があります。SQLFiddle スキーマ: CREATE TABLE [dbo]。[ICFilters]( [ICFilterID] [int] IDENTITY(1,1)NOT NULL、 [ParentID] [int] NOT NULL DEFAULT 0、 [FilterDesc] [varchar](50)NOT NULL、 [アクティブ] [tinyint] NOT NULL DEFAULT 1、 CONSTRAINT [PK_ICFilters] PRIMARY KEY CLUSTERED ([ICFilterID] ASC)WITH PAD_INDEX = OFF、 STATISTICS_NORECOMPUTE = OFF、 IGNORE_DUP_KEY = OFF、 ALLOW_ROW_LOCKS = ON、 ALLOW_PAGE_LOCKS = ON )ON …


2
ORDER BYに使用するには、選択したすべての列をインデックスでカバーする必要がありますか?
SOで、誰かが最近インデックスを使用してORDER BYを使用しないのはなぜかと尋ねました。 この状況には、3つの列と1万行からなるMySQLの単純なInnoDBテーブルが含まれていました。列の1つである整数にインデックスが付けられ、OPはその列でソートされたテーブル全体を取得しようとしました。 SELECT * FROM person ORDER BY age 彼はEXPLAIN、このクエリがfilesort(インデックスではなく)で解決されたことを示す出力を添付し、その理由を尋ねました。 インデックスが使用される原因となるヒントに もかかわらず、誰かが(他からのコメント/賛成をサポートして)選択された列がすべてインデックスから読み取られたときにソートにのみ使用されると回答しました(つまり、通常は列に出力)。インデックスを走査してからテーブルからカラムをフェッチすると、ランダムI / Oが発生するという説明が後で与えられました。FORCE INDEX FOR ORDER BY (age) Using indexExtraEXPLAINfilesort これが表示されますが、上のマニュアルの章の顔に飛ぶためにORDER BY最適化だけでなく、満足していることに強い印象伝え、ORDER BYインデックスからすると、確かに(追加のソートを実行することが好ましいが、filesortクイックソートとマージソートの組み合わせで、それゆえ 必要があります下の結合しました;順番にインデックスを歩きながらテーブルをシークする必要があります-したがって、これは完全に理にかなっています)が、次のように述べながら、この「最適化」の申し立てを無視することもできません。Ω(nlog n)O(n) 次のクエリは、インデックスを使用してORDER BYパーツを解決します。 SELECT * FROM t1 ORDER BY key_part1,key_part2,... ; 私の読書では、これはまさにこの状況の場合です(ただし、明示的なヒントなしにインデックスが使用されていませんでした)。 私の質問は: MySQLがインデックスを使用することを選択するために、選択されたすべての列にインデックスを付ける必要がありますか ある場合、これはどこに文書化されていますか(もしあれば)? そうでない場合、ここで何が起こっていましたか?
15 mysql  index  innodb  order-by 


1
再帰クエリの結果をツリーのように展開してソートするにはどうすればよいですか?
あなたが持っていると仮定しましょう nodesようなテーブル。 CREATE TABLE nodes ( node serial PRIMARY KEY, parent integer NULL REFERENCES nodes(node), ts timestamp NOT NULL DEFAULT now() ); これは、最上位にルートノードがあり、ルートノードまたは他の子ノードからぶら下がっているいくつかの子ノードを持つ、標準的なノードのようなツリー構造を表します。 いくつかのサンプル値を挿入しましょう: INSERT INTO nodes (parent) VALUES (NULL), (NULL), (NULL), (NULL), (1), (1), (1), (1), (6), (1) , (6), (9), (6), (6), (3), (3), (3), (15); 次に、深さ4までの最初の10個のルートノードとそのすべての子を取得します。 WITH …

3
ビューのORDER BY句の代替手段は何ですか?
この質問はこのサイトにある必要がありました:) このビューを使用する場合、複数のorder byが存在する可能性があるため、ORDER BYはビューでの使用を禁止されています。 たとえばTOP 99.999999 PERCENT、この制限を回避する方法があることは知っていますが、ハッキングの方法ではなく、ベストプラクティスを知りたいと思います。 したがって、個人使用のためにデータベースにビューを作成する場合、つまりデータベースに接続し、固定およびソートされたデータのみを表示する場合、ビューを注文できない場合はどうすればよいですか? 現在、SQL Server DBには、TOPハックに関するビューがあり、よく使用していますが、間違っていると感じています。

4
この特定の冗長な派生テーブルの順序が保証されない可能性は本当にありますか?
ルーカスエダーとのTwitter会話でこの質問に遭遇しました。 正しい動作は、最も外側のクエリにORDER BY句を適用することですが、ここでは、最も外側のクエリでDISTINCT、GROUP BY、JOINまたはその他のWHERE句を使用していないため、RDBMSは単に内部クエリで並べ替えられた受信データ? SELECT * FROM ( SELECT * FROM table ORDER BY time DESC ) AS t この例をPostgreSQLで実行すると、少なくとも、内部クエリとこの派生テーブルの両方の例の実行プランが同じになり、同じ結果セットが得られます。 したがって、プランナーは最も外側のクエリを冗長にするか、単に内部のテーブルからの結果を通過させるため、単純にそのクエリを破棄すると想定します。 これはそうではないかもしれないと誰もが思いますか?

2
MySQLは別のテーブルに対して結合するときにインデックスを使用しません
2つのテーブルがあります。最初のテーブルには、CMS内のすべての記事/ブログ投稿が含まれています。これらの記事の一部は雑誌にも掲載される場合があります。その場合、それらは雑誌固有の情報を含む別のテーブルと外部キーの関係を持っています。 以下は、これらの2つのテーブルの作成テーブル構文の簡略化されたバージョンで、いくつかの重要でない行が削除されています。 CREATE TABLE `base_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date_published` datetime DEFAULT NULL, `title` varchar(255) NOT NULL, `description` text, `content` longtext, `is_published` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `base_article_date_published` (`date_published`), KEY `base_article_is_published` (`is_published`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `mag_article` ( `basearticle_ptr_id` int(11) NOT NULL, …

3
NOLOCKヒントは、返されるレコードの順序を変更します
テーブルClientフィールドにクラスター化インデックスがありますLastName。 テーブルからすべてのレコードを単純にダンプすると、(nolock)問題のクエリのようにヒントが使用されていない限り、レコードはアルファベット順に表示されます。そのヒントは、レコードの順序を変更します。それをすべきですか?他のどのセッションにも、そのテーブルへの変更を伴うオープントランザクションsp_who2がないことは確かです(少なくとも私には何も表示されていません)。 順序の違いはどのように説明できますか? コメントから引き出された追加情報: による注文はありません。非クラスター化インデックスは順序を強制する必要がありますか? クラスター化インデックスを指定するインデックスヒントを使用する場合でも、クエリは異なる順序を返します。彼らはすべきですか?nolock返されたレコードの順序が、計画の目に見える変更なしに変更されるのはなぜでしょうか。 私はそれらに対してWinDiffを行いました-[the] (nolock)[query hint] を除いて同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.