1

これは、テーブル内のテキストの検索に関するものです

Table_Name: 詳細

列: Fname、Mname、Lname、NName

このテーブルには、ほぼ 100 万のレコードが含まれています

一部のクエリオプションにOracleフォームを使用しています

ユーザーが 1 つの名前を入力すると、フォームはその名前をテーブルで検索し、名前のいずれか (Fname/Mname/Lname/NName) に基づいて、その列が存在し、さらにアクションが続行されます。

テーブルに大量のデータが存在するため、検索に時間がかかっています。

テーブルの関数インデックスを試してみましたが、うまくいきませんでした。また、より多くの時間がかかりました

後で、このようなものを試して、すべての名前を 1 つの名前に連結し、それをカーソルに入れました。カーソル出力を使用して Instring で試しましたが、ハングしています

動的カーソルの作成も検索してみましたが、うまくいきませんでした。

私のデータベースはOracleです

効果的な解決策を見つけるのを手伝ってもらえますか、何か見逃した場合は助けてください.

ありがとう

4

1 に答える 1

0

まず第一に、1万ルピー(100,000)のレコードは、それ自体が大きなテーブルではありません。

私が見ることができる問題は、クエリがFname / Mname / Lname/NName列に対してORを実行しているように見えることです。これは、クエリが結果を取得するために少なくとも1回の全表スキャンを実行することを意味します。デバッグを使用して、データベースに対して実行されているクエリを取得し、自動トレースを使用してSQLプロンプトでこれを調整することをお勧めします。

検索が、EQUALSではなくこれらの列に対してLIKEのようなことを行っているかどうかを明確にする必要がある場合があります。LIKEはクエリにさらに影響を与え、インデックスに影響を与えます。

確かに、INSTRを使用すると、検索された列のインデックスが無効になります。

あなたのブロックが何に基づいているかは明らかではありません。テーブル、ビュー、クエリ、プロシージャ

フォームFIRST_ROWSのブロックプロパティのヒントを使用してみてください。

于 2013-01-07T10:19:58.163 に答える