問題タブ [sqlperformance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 単純な「または」で SQL コストが急増するのはなぜですか?
データ (~100 万エントリ) で明確な名前を見つけるために、次のステートメントがあります。
Oracle は 1477315000 という莫大なコストを示し、実行は 5 分後に終了しません。OR を独自の exists サブ句に分割するだけで、パフォーマンスが 0.5 秒に向上し、コストが 45000 に向上します。
これはめったに実行されないクエリであり、CONTACT がどのインデックスよりも優れていることは知っていますが、この高いコストがどこから来るのか疑問に思っています。どちらのクエリも意味的には同等のようです。
sql - 最適化された 1 つのクエリで、日、月、年、生涯の合計レコードを取得します
私は7.4を実行しているPostgres DBを持っています(ええ、私たちはアップグレードの真っ最中です)
日次、月次、年次、および生涯のレコード数を取得するための 4 つの個別のクエリがあります。
DAY
月の場合は、クエリ内の単語をMONTH
期間ごとに置き換えるだけです。
1 つのクエリで目的の結果をすべて取得する方法と、推奨される最適化についてのアイデアを探しています。
前もって感謝します!
注: date_field はタイムゾーンなしのタイムスタンプです
アップデート:
申し訳ありませんが、追加のクエリ制約を使用してレコードを除外しています。date_field 比較の要点を伝えたかっただけです。混乱を招いて申し訳ありません
mysql - データベース内の整数または長い文字列(一意)の検索に基づくパフォーマンス?
データベースのテーブルに5つの列があり、2つは一意です(1つは整数で、もう1つは文字列です)。
整数はのよう
1,5,6,7,9,0
であり、文字列はのよう http://exmaple.com/Book-on-the-self-no-2
です。
ここで、行の検索にどの列を使用する必要がありますか?パフォーマンスにどのように影響しますか?データベースはsqlまたはmysqlですか?
感謝..
sql - IN を使用した SELECT 句 ... 非常に遅いですか?
Oracle DB への次のクエリを確認して、何が問題なのかを指摘してください。
クエリ統計:
- かかった時間: 10.53 秒。
指標:
t2.empno
インデックスされています。t1.id
インデックスされています。t2.id
インデックスされています。
アップデート
上記のクエリは、私が使用するクエリの単なるサンプル レプリカです。以下、より正確な形で
計画の説明
クエリ:
索引付けされた列:
テーブル
表 2
sql-server - SQL Serverは複雑なビューでWHERE条件を伝播しますか?
質問から何を意味するのかが明確でない場合に備えて、この質問の後に完全な例を示しました。
約5つのテーブルのデータを結合するビューを作成しました。テーブルには膨大な量のデータがあり、クエリの実行には時間がかかります。私の質問は、私がそうする場合:
SQL Serverは「私が何を意味するのかを知っており」、その条件をビューの基になる結合に自動的に伝播しますか?すべての人に実行されるわけではありませんが、適切な段階で結果セットを最小限に抑えるようにします。それとも、すべてに対して実行さWHERE ID = 1000
れ、完全な結果セットに対して実行されますか?
例
私が言っていることを単純化するために(...うまくいけば)、これが疑似TSQLシナリオの例です:
People
だから私は私にすべて、Activities
彼らが関わったもの ActivityType
、そしてLocation
それが起こったことを示すビューが欲しいのです。この設定はそれほど複雑ではありませんが、各エンティティが数万と言われると、実行に非常に長い時間がかかる可能性があることがわかります。
ビューは次のようになります。
だから
ビュー内のクエリはすべてのユーザーに対して実行されますか、それともSQL ServerはそれをPeople.DOB
フィールドに適用する必要があることを認識しますか?
asp.net - 複数のラウンドトリップと一時テーブルの使用?
いくつかの列を含むレコードのリストを保存する必要があります。それには2つの方法があります。
その要素のリストを作成し、コード内からストアド プロシージャを複数回実行するだけです。
foreach(TestInfo test in lstTestInfo) {//ストアド プロシージャを実行}
文字列を作成してデータベースに送信し、そこで分割して一時テーブルに保存し、そこに 1 回の往復で挿入できます。
これは深刻な問題ではありませんが...いくつかの洞察が必要です。ありがとう!
sql-server - 例外をスローせずに効果的な方法で重複キー挿入を処理する方法
私のケースのシナリオは、挿入のみを行うプロシージャにパラメーターを渡します。ただし、2 つのスレッドが同じ値を渡そうとする場合があります。
例外をスローせずに、最小限のロックでこの状況を処理するにはどうすればよいですか?
私のパフォーマンス要件は、1 秒あたり少なくとも 10,000 回の挿入です。
編集:列は一意です。タイムスタンプは、挿入前に変更 (調整) される場合があります。
sql - ユーザー定義関数とパフォーマンスを使用していますか?
ストアド プロシージャを使用してデータを取得していますが、動的にフィルター処理する必要がありました。たとえば、ID が 5、10、または 12 のデータを取得したくない場合は、文字列としてプロシージャに送信し、ユーザー定義関数を介してテーブルに変換します。ただし、パフォーマンスを考慮する必要があるため、例を次に示します。
解決策 1:
解決策 2:
パフォーマンスに優れたソリューションはどれですか?
sql - SQL - 個別のレコードを効率的に選択する方法
非常にパフォーマンスに敏感な SQL Server DB を持っています。次の問題を効率的に選択する必要があります。
4つのフィールドを持つ単純なテーブルがあります:
各 UserID は、Active='false' の GroupID (および複数の groupID) で複数回表示できますが、Active='true' の場合は 1 回だけです。
そのような:
ユーザーの最後のアクティブな状態を保持する必要がある特定のグループのテーブルから、すべての個別のユーザーを選択する必要があります。ユーザーがアクティブな状態にある場合 - ユーザーの非アクティブな状態を返す必要はありません。
単純な解決策は二重選択です。1 つはすべてのアクティブなユーザーを選択し、もう 1 つは最初の select ステートメントに表示されないすべての非アクティブなユーザーを選択します (各ユーザーはある時点で非アクティブな状態になる可能性があるため)。 )。しかし、これは最初の選択 (アクティブなユーザーを含む) を 2 回実行することになり、これは非常に望ましくありません。
必要なクエリを取得するために 1 つだけを選択するスマートな方法はありますか? アイデア?
よろしくお願いします!