タグ付けされた質問 「sorting」

4
NULLが最初にソートされるのはなぜですか?
列にNULL値があり、値の昇順で並べ替えるときに、NULLが最初にソートされるのはなぜですか? select 1 as test union all select 2 union all select NULL union all select 3 union all select 4 order by test 結果として NULL 1 2 3 4 NULLは「不定」または「不明」の可能性があると考え続けます。その場合、値は他のすべての値よりも大きくなる可能性があるため、最後にソートしませんか?(または、これはどこかのソートオプションですか?) 私はSQL Server 2008R2を使用していますが、これはすべてのSQL Server、おそらくすべてのRDBMSに当てはまると思われます。

2
数百万行にわたるカスタマイズ可能な並べ替えによるページングパフォーマンス
このアプリケーションには、ユーザーが多数のレコード(1000万から2000万)をページングできるグリッドがあります。グリッドは、多数の列(20以上)での昇順と降順の並べ替えをサポートしています。値の多くも一意ではないため、アプリケーションはidブレイクとしてidでソートして、行が常に同じページに表示されるようにします。例として、ユーザーがウィジェットサイズ(最大から開始)でソートする場合、アプリケーションは次のようなクエリを生成します。 SELECT TOP 30 * -- (Pretend that there is a list of columns here) FROM Test -- WHERE widgetSize > 100 ORDER BY widgetSize DESC, id ASC このクエリは(キャッシュデータを使用して)実行に約15秒かかります。主なコストは、widgetSizeで約130万行をソートすることです。このクエリを調整しようとしてWHERE、最大のWidgetSizesに制限された句を追加すると(上記のクエリでコメントアウトされている)、クエリはわずか〜800msかかることを発見しました(上位50,000の結果はすべてウィジェットサイズ> 100です) 。 WHERE句のないクエリが非常に遅いのはなぜですか?widgetSize列の統計情報を確認したところ、上位739行のWidgetSize> 506が示されています。30行しか必要ないため、SQLサーバーはこの情報を使用してウィジェットサイズの行のみを並べ替える必要があることを推測できませんどっちが大きい? 私はこのことができますことを知っている特定の上のインデックスに追加することにより、迅速に実行したクエリwidgetSizeとはid、しかし、このインデックスは、この特定のシナリオでのみ有用であり、(例えば)ユーザがソート方向を反転させる場合は無価値になります。このテーブルには多くの追加の列が含まれており、各インデックスは大きいため(〜200 MB)、すべての可能な並べ替え順序にインデックスを追加する余裕はありません。 すべての可能な並べ替え順序にインデックスを追加せずにこれらのクエリクエリを実行する方法はありますか?(ユーザーは20以上の列のいずれかでソートできます) 次のスクリプトは、上記のテーブルを作成し、代表的なデータを入力します。テーブルは実際のテーブルよりもはるかに狭いですが、私が見ているパフォーマンスを示しています。私のPCでは、where句のあるクエリは200ミリ秒かかりますが、where caluseのないクエリは800ミリ秒かかります。 警告:このスクリプトの実行後の結果のデータベースのサイズは最大2Gbです。 CREATE TABLE Test ( id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, …

1
ネストされていない配列の要素の元の順序を保持する方法は?
与えられた文字列: 「PostgreSQLは気の利いたものだと思う」 その文字列内で見つかった個々の単語を操作したいと思います。基本的に、私は単語の詳細を取得できるものとは別に、この辞書のその文字列のネストされていない配列に参加したいと思っています。 これまでのところ: select word, meaning, partofspeech from unnest(string_to_array('I think that PostgreSQL is nifty',' ')) as word from table t join dictionary d on t.word = d.wordname; これは、私が望んでいたことの基本を達成しますが、元の単語の順序を保持しません。 関連質問: PostgreSQLの要素番号を持つunnest()

1
流出をtempdbにソートしますが、推定行は実際の行と等しくなります
最大メモリを25GBに設定したSQL Server 2016 SP2では、1分間に約80回実行されるクエリがあります。クエリにより、約4000ページがtempdbに流出します。これにより、tempdbのディスクで大量のIOが発生します。 あなたが見てとるときにクエリプラン(簡体クエリを)あなたは、推定行数は実際の行数と同じであるが、依然として発生こぼれることがわかります。したがって、古い統計が問題の原因になることはありません。 私はいくつかのテストを行い、次のクエリをTempdbにスピルしました。 select id --uniqueidentifier from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) しかし、別の列を選択した場合、流出は発生しません。 select startdate --datetime from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) そこで、id列のサイズを「拡大」しようとしました。 select CONVERT(nvarchar(512),id) from SortProblem where [status] ='A' order by SequenceNumber asc option …

4
GROUP BYおよびORDER BYを使用した大きなテーブルでのクエリが遅い
次のような、720万タプルのテーブルがあります。 table public.methods column | type | attributes --------+-----------------------+---------------------------------------------------- id | integer | not null DEFAULT nextval('methodkey'::regclass) hash | character varying(32) | not null string | character varying | not null method | character varying | not null file | character varying | not null type | character varying | …


4
次の文字列を次の順序で並べ替える照合順序はありますか?1,2,3,6,10,10A、10B、11?
可変長の整数を含むVARCHAR列を持つデータベースがあります。私はそれらをソートして、10が1ではなく9の後に来るようにし、70Aが70の後に来るようにします。WHERE句のPATINDEX()、CTE、およびCASEステートメントでこれを行うことができました。 しかし、これが不必要な照合があるかどうか疑問に思っていました。

2
MySQLでのソートにインデックスが使用されているかどうかを確認するにはどうすればよいですか?
WHERE句で使用されているインデックスの最後の列である列を使用するORDER BY句を含むクエリがあります。 SELECT cols FROM tables WHERE col_1 = x AND col_2 = y AND col_3 = z ORDER BY col_4 インデックスは、列(col_1、col_2、col_3、col_4)にこの順序で作成されます。 クエリのプロファイルを作成すると、99%以上の時間を「結果の並べ替え」状態で費やしています。col_4は、違いがある場合はタイムスタンプ列です。ORDER BYは特定の状況でのみインデックスを使用できることを理解していますが、オプティマイザがいつ使用するかについては、まだ少し不思議です。
10 mysql  index  sorting 

1
インデックスを使用してpostgresでのソートを高速化する方法
私はpostgres 9.4を使用しています。 のmessagesスキーマは次のとおりです。メッセージはfeed_idに属し、posted_atを持っています。また、メッセージには親メッセージを含めることができます(返信の場合)。 Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, btree (message_id) "index_messages_on_feed_id_posted_at" btree (feed_id, posted_at DESC NULLS …

5
最適なsort_buffer_sizeを決定する方法は?
私は次のことを言うサンプル構成ファイルから読みました: # Sort buffer is used to perform sorts for some ORDER BY and GROUP BY # queries. If sorted data does not fit into the sort buffer, a disk # based merge sort is used instead - See the "Sort_merge_passes" # status variable. Allocated per thread if sort is …

1
ORDER BYと文字と数字の混合文字列の比較
通常は「自然に」ソートする必要がある数字と文字の混合ストリングである値について、いくつかのレポートを作成する必要があります。たとえば、「P7B18」や「P12B3」など。@文字列は主に文字と数字が交互になったシーケンスです。ただし、これらのセグメントの数とそれぞれの長さは異なる場合があります。 これらの数値部分を数値順にソートしてください。明らかに、これらの文字列値をで直接処理する場合ORDER BY、「P12B3」は「P7B18」の前に来るでしょう。 「P12」。 範囲の比較などもできるようにしたいと思い@bin < 'P13S6'ます。浮動小数点数や負の数を処理する必要はありません。これらは厳密に私たちが扱っている負でない整数になります。文字列の長さとセグメント数は、上限が固定されていないため、潜在的に任意である可能性があります。 私たちのケースでは、文字列の大文字小文字の区別は重要ではありませんが、照合に対応した方法でこれを行う方法がある場合、他の人が便利だと思うかもしれません。これらすべての最も醜い部分は、WHERE句で順序付けと範囲フィルタリングの両方を実行できるようにしたいです。 これをC#で実行している場合、それは非常に単純なタスクです。いくつかの解析を行ってアルファを数値から分離し、IComparableを実装すれば、基本的にはこれで完了です。もちろん、SQL Serverは、少なくとも私の知る限り、同様の機能を提供していないようです。 誰かがこれを機能させるための良いトリックを知っていますか?IComparableを実装し、これを期待どおりに動作させるカスタムCLR型を作成する、あまり公表されていない機能はありますか?私はまた、愚かなXMLトリック(「リストの連結」も参照)に反対していません。また、サーバーでCLR正規表現のマッチング/抽出/置換ラッパー関数も使用できます。 編集: もう少し詳細な例として、データがこのような動作をするようにしたいと思います。 SELECT bin FROM bins ORDER BY bin bin -------------------- M7R16L P8RF6JJ P16B5 PR7S19 PR7S19L S2F3 S12F0 つまり、文字列をすべての文字またはすべての数字のトークンに分割し、アルファベット順または数値順に並べ替えます。左端のトークンが最も重要な並べ替え条件です。先ほど触れたように、IComparableを実装した場合の.NETの簡単な説明ですが、SQL Serverでそのようなことを行う方法(またはその方法)がわかりません。それは確かに私がこれまでに10年ほどの作業で遭遇したものではありません。

5
個々の食品の最新の購入記録のみを表示するSQLクエリ
MS Access 2013で食品購入/請求システムを使用していて、個々の食品の最新の購入価格を返すSQLクエリを作成しようとしています。 ここに私が作業しているテーブルの図があります: SQLについての私の理解は非常に基本的です。次の(正しくない)クエリを試してみました。(DISTINCT演算子のため)アイテムごとに1つのレコードのみが返され、最新の購入のみが返されることを期待しています(ORDER BY [Invoice Date] DESC) SELECT DISTINCT ([Food items].Item), [Food items].Item, [Food purchase data].[Price per unit], [Food purchase data].[Purchase unit], Invoices.[Invoice Date] FROM Invoices INNER JOIN ([Food items] INNER JOIN [Food purchase data] ON [Food items].ID = [Food purchase data].[Food item ID]) ON Invoices.ID = [Food …

1
ストレージの順序と結果の順序
これは、主キーで指定されたソート順から派生した質問ですが、ソートはSELECTで実行されます。 @Catcallは、ストレージの順序(クラスター化インデックス)と出力の順序についてこれを述べています。 多くの人々は、クラスター化インデックスが出力のソート順を保証すると信じています。しかし、それはそうではありません。ディスク上のストレージの順序を保証します。 たとえば、このブログ投稿をご覧ください。 Hugo Kornelisによるブログ投稿を読みましたが、インデックスがSQLサーバーが特定の順序でレコードを読み取ることを保証するものではないことを理解しています。しかし、自分のシナリオではこれを想定できないことを受け入れるのに苦労していますか? CREATE TABLE [dbo].[SensorValues]( [DeviceId] [int] NOT NULL, [SensorId] [int] NOT NULL, [SensorValue] [int] NOT NULL, [Date] [int] NOT NULL, CONSTRAINT [PK_SensorValues] PRIMARY KEY CLUSTERED ( [DeviceId] ASC, [SensorId] ASC, [Date] DESC ) WITH ( FILLFACTOR=75, DATA_COMPRESSION = PAGE, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, …

5
最後に特殊文字を含むOracleソートvarchar2列
OracleでVarchar2またはNVarchar2列を独自のカスタム定義の順序に並べ替えるにはどうすればよいですか。または、最初に文字、次に数字、次にすべての特殊文字を配置する既存のオプションがあります。 最初のアプローチは、文字を数字に手動でマッピングする関数を使用することでした。 select id, sorted_column from some_table order FN_SPECIAL_SORT_KEY(sorted_column,'asc') 特殊なソート関数は、各文字を2桁の数値にマップし、戻り値はソートに使用されます。これは本当に高額な連結であるように見え、間違っているように感じます。 for i in 1..length(sorted_text) loop v_result:=v_result || case substr(sorted_text,i,1) WHEN ' ' THEN 82 WHEN '!' THEN 81 WHEN '"' THEN 80 WHEN '#' THEN 79 WHEN '$' .............. WHEN 'u' THEN 15 WHEN 'U' THEN 15 WHEN 'v' THEN …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.