2

リンク サーバー接続を介してOracleデータベースに接続するMS SQL Server 2005インストールがあります。

OPENQUERY()一連のコマンドを使用して、多くの SELECT ステートメントが実行されています。これらのステートメントの大部分の WHERE 句は、VARCHAR列に対して使用されます。

WHERE 句で大文字と小文字が区別されると、パフォーマンスに大きな影響を与える可能性があると聞いたことがあります。

私の質問は、最大のパフォーマンスを得るために、非バイナリ文字列の WHERE 句が大文字と小文字を区別しない方法で実行されていることを確認するにはどうすればよいですか?

4

5 に答える 5

6

それは実際には逆です:

大文字と小文字を区別...

WHERE column = :criteria

...インデックスをcolumn直接使用して、うまく機能します。

大文字と小文字を区別しないには、通常、次のようなものが必要です...

WHERE UPPER(column) = UPPER(:criteria)

...インデックスを使用せcolumn、パフォーマンスが低下します(注意して機能インデックスを作成しない限りUPPER(column))。

何かを変更するかどうかはわかりませんOPENQUERY()が、純粋にOracleの観点からは、大文字と小文字を区別するクエリと区別しないクエリの両方をパフォーマンスを上げることができ、区別しないものには特別な注意が必要です(関数インデックス)。

于 2011-09-07T10:05:21.690 に答える
4

デフォルトでは、SQL サーバーは大文字と小文字を区別しない照合を使用しますが、Oracle はデフォルトで大文字と小文字を区別します。検索では通常、Upper() 比較を実装して、ユーザーの検索エクスペリエンスを向上させます。

于 2011-09-09T03:26:06.103 に答える
2

WHERE句で大文字と小文字が区別される場合、パフォーマンスに大きな影響を与える可能性があると聞きました。

どこから聞いたの?私には神話のように聞こえます...むしろそれは逆になります。つまり、WHERE lower(field) = 'some str'ケースに依存しない比較を達成するために何かを使用する場合、パフォーマンスに悪影響を及ぼします。大文字と小文字を区別しない照合を使用すると、おそらく大幅に高速になります...

考慮すべきもう1つの重要な点は、ビジネスルールで大文字と小文字を区別しない比較が実際に許可されているかどうかです。

そして最後になりましたが、何かを聞いたからではなく、実際にパフォーマンスの問題が発生したときに最適化を開始する必要があります...

于 2011-09-07T10:09:18.443 に答える