問題タブ [optimizer-hints]
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.
oracle - Oracle スタイルの実行ヒント
Oracle 用にかなり複雑な SQL を作成する場合、遅かれ早かれ、奇妙な実行ヒントを適用する必要があります。これは、Oracle が「最適な」実行計画自体を把握できないように見えるためです。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm
これは確かに SQL 標準ではありません。しかし、それでも、これらの種類のヒントをサポートする RDBMS は他にあるのでしょうか? SQL に「埋め込まれた」ヒントを本当に意味しているのでしょうか? それらは構文的に似ていますか (つまり、SELECT
キーワードと最初に選択された の間に配置されていCOLUMN
ますか)? さまざまな RDBMS のヒントを比較する一般的なドキュメント ページを知っていますか?
注: 主に次の RDBMS に興味があります: Postgres、MySQL、HSQLDB、H2、Derby、SQLite、DB2、Sybase、SQL Server
c++ - VSC ++プロジェクトをより速くコンパイルして起動する方法は?
VSC ++プロジェクトを高速にコンパイルして開始するためにどのような手法を使用していますか?
私たちにとって、特にすべてのdllのロードには長い時間がかかります。これをスピードアップする方法はありますか?プロジェクトは大量の.dllをロードし、それらのいくつかは特に遅いです。
プロジェクトにユニティビルドを使用するようになったので、すでに非常に高速にコンパイルされています。=)
ありがとう!
sql - 実際には、インデックス付きの (UNIQUE ではない) 列に実際に一意の値が含まれていることを Oracle SQL オプティマイザに納得させる
UNIQUE
非インデックスを持つ列を使用するビューを作成しています。ただし、私の見解のコンテキスト内では、列には一意の値のみが含まれると確信しています (WHERE
句で課された条件のため)。
実際の問題は、誰かがその列に基づいてビューにクエリを実行したときに発生します (例: SELECT * FROM MY_VIEW WHERE COLUMN_WITH_NON_UNIQUE_INDEX = 'foo'
)。オプティマイザーは、多くの行を受け取ることになると確信しています (インデックスが技術的にないためUNIQUE
)。このため、オプティマイザーはビューの他の場所で他のインデックスを使用することを避け、全テーブル スキャンを優先します (クールではありません)。
インデックスのない列UNIQUE
に実際に一意の値が含まれることをオプティマイザに納得させる方法はありますか? 確かに、重複した値が列に忍び込む可能性はありますが、これはバグと見なされ、正当な一意のデータが損なわれることはありません。
残念ながら、私は問題のテーブルを制御できません (ため息)。
sql - SQL ステートメントでのプロシージャの並列実行 (Oracle 11g)
Check-Function
実行にかなり時間がかかるを使用する SQL ステートメントがあります。
の実行を並列化したいのですが、うまくいきCheck-Function
ません。
私が犯した間違いはどこですか?
以下のサンプルは実行に 5 秒かかりますが、私の理解では、並列処理のために約 1 秒かかるはずです。
テスト用のコード スニペット:
oracle - where句を特定の順序で実行するためのOracleのヒントはありますか?
datecolumnがインデックス付けされているテーブルに対する次の2つのクエリについて考えてみます-
Q1はインデックスを使用します。しかし、Q2はどういうわけか全表スキャンを行います。オラクルがどういうわけか最初に「datecolumn<sysdate-1」を実行することを選択したからですか?その場合、1つの列を含むwhere句の実行順序を強制する方法はありますか?
oracle - Oracle 11g INDEX_SS ヒント
タイプ CHAR(15) の列 A、B、および C と固有索引を持つ表があるとします。
A と C を指定する WHERE 句を含むクエリがある場合、オラクルのオプティマイザはインデックス レンジ スキャンを選択します。しかし、B のカーディナリティが低いことがわかっている場合、オラクルにインデックス スキップ スキャンを使用するように指示する必要がありますか? スキップ スキャンは、先頭以外の列 (この場合は B) をスキップする方が、範囲スキャンよりもパフォーマンスが高くなりますか? スキップ スキャンは、インデックス内の A と B の両方をスキップしますか? それとも B だけをスキップしますか?
oracle10g - 静的オプティマイザ戦略による遅いパラメータ化/フィルタリングされたクエリに対する Oracle SQL 戦略
以下よりも簡単に言えば、1 つまたは複数のクエリ パラメータ、たとえばx_id
(またはレポート/テーブル関数パラメータ) があり、パフォーマンスが重要であり(たとえば、いくつかの主キー インデックスを使用できる)、それが(ユース ケースに応じて) ある場合/report フィルターが適用された、...) の 1 つ
null
- 完全一致(例: 一意の ID)
- みたいな表現
- または正規表現
次に、これらすべての可能性が単一のクエリでコード化されている場合、オプティマイザーが
- 実際のパラメーター runtime-value とは無関係に、固有の静的プランを生成します
- したがって、いくつかのインデックスを使用すると仮定することはできませんが
x_id
、たとえば、完全に一致する可能性があります
これを処理する方法はありますか
- 一部のPL/SQLコードで、
n
事前定義済およびユースケースに最適化された問合せ/ビューから選択できるようにしますか?- これは、そのような柔軟なパラメーターがあればあるほど、かなり大きくなる可能性があります
- または、手動で文字列を構築し、動的にコンパイルしたクエリですか?
基本的に、以下に文書化され実行可能なように、わずかに異なる2つのユースケース/質問があります。
あ-select * from tf_sel
B -select * from data_union
これは、 SQL ヒントまたはその他のトリックを使用して解決できる可能性があります。
これらのクエリを高速化するために、現在、特定の実装レベル (テーブル関数)で"マージされたクエリ" を分離しています。
私が見たように、主な問題は、オプティマイザのSQL計画の静的な性質にあるようです。これは常に同じですが、「クエリ時定数」フィルタパラメータを考慮すると、はるかに効率的になります。
これはサンプルコードへのコメントであり、jonearles によって提供された回答です。
実際、あなたの答えは私の(特定のシナリオでは一緒に発生しますが無関係な)ユースケースAとBの混同でした.それでもなお、オプティマイザーには動的なFILTER
機能や他の機能があると述べたことは不可欠です.
ユース ケース B (「データ パーティション/グループ ユニオン」)
実際のユース ケース B (サンプル テーブルに基づく) はこのように見えますが、実際のシナリオでパフォーマンスの問題を確認する必要があります。たぶん、すでにいくつかの問題が見られますか?
ユース ケース A (列クエリ タイプによるフィルタリング)
あなたのサンプルテーブルに基づいて、これは私がやりたいことにもっと似ています。ご覧のとおり、fast だけを使用したクエリwhere p.ft_id = 'eq' and x.indexed_val = p.val
はインデックスの使用状況を示していますが、句にさまざまなフィルター オプションがすべて含まれているwhere
と、プランの切り替えで常にフル テーブル スキャンが使用されます : - :p_filter_type
/
( :p_indexed_val_filter
SQL は、私が置いた 1 つの場所だけではなく、変更されません。)
oracle - Oracleでインデックスrowidによるアクセスを強制するにはどうすればよいですか?
「r_attributfeld」(〜8m行)での完全なテーブルスキャンを回避するために、Oracleがテーブル「r_rapport」(〜60k行)のインデックス行IDによるテーブルアクセスを常に使用するように強制する助けが必要です。次の計画になるクエリがあります。
FIRST_ROWS(1) ヒントを追加することで、これはより望ましい計画に変更されます。
残念ながら、このクエリは実行時に作成されます。サブリクエストが 2 つではなく 3 つある場合、FIRST_ROWS ヒントは無視され、800 万行に対して複数のフル テーブル スキャンが再び実行されます。与えられたデータ分散を使用すると、ROWID によるアクセスは常に (ほぼ瞬時に) 高速になりますが、オラクルが好む計画では数秒かかります。
両方のテーブルで ROWID ヒントを使用してみましたが、それらが非推奨になっていることがわかりました。
任意のポインタをいただければ幸いです。
=編集=
USE_NL & 新しいインデックス
SQL:
とその計画:
このクエリは即座に完了するため、恐ろしい、恐ろしいコスト見積もりです。
java - 生成されたコードの Netbeans コードヒント
最近、私の NetBeans は、GUI を作成するときに NetBeans 自体によって自動生成されるコードの黄色のヒントを大量に表示します。自動生成されたコードを単純に変更することは明らかにできないため、それを取り除く方法はありますか。
新しいバージョンの Java でサポートされている新しいコードの最適化がいくつかあると思います。また、NetBeans コード インスペクターはそれらを検出できますが、その GUI ビルダーはそれらに追いつくには少し古くなっています。NetBeans IDE 8.0.2 (ビルド 201411181905)を使用していますが、すべてが最新のようです。
それについて何かできることはありますか?それとも、これまでのところ、それらのヒントと一緒に暮らす必要がありますか? または、それらを無効にして私を悩ませないでください...
sql - Oracle ヒントのデフォルトの並列度
パフォーマンスを調整するためにデフォルトの並列度を使用しましたが、最良の結果も得られました。しかし、他のジョブが同じテーブルに同時にアクセスした場合に影響があるとは思えません。
以下サンプルコード。
利用可能なサーバーの数は 8 です。このデフォルトの並列度はどのように機能しますか? 他のジョブが同じテーブルで同時にクエリを実行している場合に影響しますか? このクエリを本番環境に移行する前に、影響があるかどうかを知りたいですか? ありがとう!