バックグラウンド
私は現在、数年前に急いで最初に書いた検索エンジンを書き直しています:)
現在、検索には、ユーザー、組織、ニュースの見出しなど、最大 5 つの異なる内部ビジネス オブジェクト/テーブルが含まれます。したがって、ユーザー"The Quick Brown Fox"
が検索ボックスに入力すると、各タイプのビジネス オブジェクトの結果が得られます。
各ビジネス オブジェクトにはspSearchUsers
、spSearchOrganizations
、 などのストアド プロシージャが関連付けられています。
問題
ここで、検索ごとに、各ストアド プロシージャを (BL -> データ アクセス レイヤー経由で) ビジネス オブジェクト タイプごとに複数回呼び出しています。たとえば、ユーザーが を検索する場合、"The Quick Brown Fox"
文字列全体を変更せずに送信しますが、文字列をスペースごとに分割し、各単語を個別に検索します。
この場合、各ストアド プロシージャは 5 回呼び出され、1 回の検索で合計 25 回のデータベース呼び出しが行われます。私はこれが典型的ではないように感じます...しかし、それでもかなり速く実行されます。1 回の検索に約 4 ~ 5 秒かかります。
作りたいもの
単一の「マスター」ストアド プロシージャは、検索文字列全体を取得"The Quick Brown Fox"
し、個々のビジネス オブジェクト ストアド プロシージャ ( 、 など) を呼び出しspSearchUsers
、spSearchOrganizations
少しのロジックを実行し、1 つの結果セットを返します。
つまり、1 回の検索で 1 回の結果が得られます。
これは、ストアド プロシージャ、関数、および/またはユーザー定義のテーブル型を使用して実現できますか?