問題タブ [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.

0 投票する
3 に答える
289 参照

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

0 投票する
2 に答える
115 参照

c++ - VSC ++プロジェクトをより速くコンパイルして起動する方法は?

VSC ++プロジェクトを高速にコンパイルして開始するためにどのような手法を使用していますか?

私たちにとって、特にすべてのdllのロードには長い時間がかかります。これをスピードアップする方法はありますか?プロジェクトは大量の.dllをロードし、それらのいくつかは特に遅いです。

プロジェクトにユニティビルドを使用するようになったので、すでに非常に高速にコンパイルされています。=)

ありがとう!

0 投票する
2 に答える
210 参照

sql - 実際には、インデックス付きの (UNIQUE ではない) 列に実際に一意の値が含まれていることを Oracle SQL オプティマイザに納得させる

UNIQUE非インデックスを持つ列を使用するビューを作成しています。ただし、私の見解のコンテキスト内では、列には一意の値のみが含まれると確信しています (WHERE句で課された条件のため)。

実際の問題は、誰かがその列に基づいてビューにクエリを実行したときに発生します (例: SELECT * FROM MY_VIEW WHERE COLUMN_WITH_NON_UNIQUE_INDEX = 'foo')。オプティマイザーは、多くの行を受け取ることになると確信しています (インデックスが技術的にないためUNIQUE)。このため、オプティマイザーはビューの他の場所で他のインデックスを使用することを避け、全テーブル スキャンを優先します (クールではありません)。

インデックスのない列UNIQUEに実際に一意の値が含まれることをオプティマイザに納得させる方法はありますか? 確かに、重複した値が列に忍び込む可能性はありますが、これはバグと見なされ、正当な一意のデータが損なわれることはありません。

残念ながら、私は問題のテーブルを制御できません (ため息)。

0 投票する
2 に答える
5911 参照

sql - SQL ステートメントでのプロシージャの並列実行 (Oracle 11g)

Check-Function実行にかなり時間がかかるを使用する SQL ステートメントがあります。

の実行を並列化したいのですが、うまくいきCheck-Functionません。

私が犯した間違いはどこですか?

以下のサンプルは実行に 5 秒かかりますが、私の理解では、並列処理のために約 1 秒かかるはずです。

テスト用のコード スニペット:

0 投票する
3 に答える
3881 参照

oracle - where句を特定の順序で実行するためのOracleのヒントはありますか?

datecolumnがインデックス付けされているテーブルに対する次の2つのクエリについて考えてみます-

Q1はインデックスを使用します。しかし、Q2はどういうわけか全表スキャンを行います。オラクルがどういうわけか最初に「datecolumn<sysdate-1」を実行することを選択したからですか?その場合、1つの列を含むwhere句の実行順序を強制する方法はありますか?

0 投票する
1 に答える
3673 参照

oracle - Oracle 11g INDEX_SS ヒント

タイプ CHAR(15) の列 A、B、および C と固有索引を持つ表があるとします。

A と C を指定する WHERE 句を含むクエリがある場合、オラクルのオプティマイザはインデックス レンジ スキャンを選択します。しかし、B のカーディナリティが低いことがわかっている場合、オラクルにインデックス スキップ スキャンを使用するように指示する必要がありますか? スキップ スキャンは、先頭以外の列 (この場合は B) をスキップする方が、範囲スキャンよりもパフォーマンスが高くなりますか? スキップ スキャンは、インデックス内の A と B の両方をスキップしますか? それとも B だけをスキップしますか?

0 投票する
2 に答える
1412 参照

oracle10g - 静的オプティマイザ戦略による遅いパラメータ化/フィルタリングされたクエリに対する Oracle SQL 戦略

以下よりも簡単に言えば、1 つまたは複数のクエリ パラメータ、たとえばx_id(またはレポート/テーブル関数パラメータ) があり、パフォーマンスが重要であり(たとえば、いくつかの主キー インデックスを使用できる)、それ(ユース ケースに応じて) ある場合/report フィルターが適用された、...) の 1 つ

  • null
  • 完全一致(例: 一意の ID)
  • みたいな表現
  • または正規表現

次に、これらすべての可能性が単一のクエリでコード化されている場合、オプティマイザー

  • 実際のパラメーター runtime-value とは無関係に、固有の静的プランを生成します
  • したがって、いくつかのインデックスを使用すると仮定することはできませんx_id、たとえば、完全に一致する可能性があります

これを処理する方法はあります

  1. 一部のPL/SQLコードで、n事前定義済およびユースケースに最適化された問合せ/ビューから選択できるようにしますか?
    • これは、そのような柔軟なパラメーターがあればあるほど、かなり大きくなる可能性があります
  2. または、手動で文字列を構築し、動的にコンパイルしたクエリですか?

基本的に、以下に文書化され実行可能なように、わずかに異なる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_filterSQL は、私が置いた 1 つの場所だけではなく、変更されません。)

0 投票する
2 に答える
5812 参照

oracle - Oracleでインデックスrowidによるアクセスを強制するにはどうすればよいですか?

「r_attributfeld」(〜8m行)での完全なテーブルスキャンを回避するために、Oracleがテーブル「r_rapport」(〜60k行)のインデックス行IDによるテーブルアクセスを常に使用するように強制する助けが必要です。次の計画になるクエリがあります。

FIRST_ROWS(1) ヒントを追加することで、これはより望ましい計画に変更されます。

残念ながら、このクエリは実行時に作成されます。サブリクエストが 2 つではなく 3 つある場合、FIRST_ROWS ヒントは無視され、800 万行に対して複数のフル テーブル スキャンが再び実行されます。与えられたデータ分散を使用すると、ROWID によるアクセスは常に (ほぼ瞬時に) 高速になりますが、オラクルが好む計画では数秒かかります。

両方のテーブルで ROWID ヒントを使用してみましたが、それらが非推奨になっていることがわかりました。

任意のポインタをいただければ幸いです。

=編集=

USE_NL & 新しいインデックス

SQL:

とその計画:

このクエリは即座に完了するため、恐ろしい、恐ろしいコスト見積もりです。

0 投票する
1 に答える
72 参照

java - 生成されたコードの Netbeans コードヒント

最近、私の NetBeans は、GUI を作成するときに NetBeans 自体によって自動生成されるコードの黄色のヒントを大量に表示します。自動生成されたコードを単純に変更することは明らかにできないため、それを取り除く方法はありますか。

新しいバージョンの Java でサポートされている新しいコードの最適化がいくつかあると思います。また、NetBeans コード インスペクターはそれらを検出できますが、その GUI ビルダーはそれらに追いつくには少し古くなっています。NetBeans IDE 8.0.2 (ビルド 201411181905)を使用していますが、すべてが最新のようです。

それについて何かできることはありますか?それとも、これまでのところ、それらのヒントと一緒に暮らす必要がありますか? または、それらを無効にして私を悩ませないでください...

0 投票する
1 に答える
649 参照

sql - Oracle ヒントのデフォルトの並列度

パフォーマンスを調整するためにデフォルトの並列度を使用しましたが、最良の結果も得られました。しかし、他のジョブが同じテーブルに同時にアクセスした場合に影響があるとは思えません。

以下サンプルコード。

利用可能なサーバーの数は 8 です。このデフォルトの並列度はどのように機能しますか? 他のジョブが同じテーブルで同時にクエリを実行している場合に影響しますか? このクエリを本番環境に移行する前に、影響があるかどうかを知りたいですか? ありがとう!