さて、基本的には、coldfusion パワー検索のデータを返すストアド プロシージャを作成しています。
もちろん、同じ列名が返される複数のテーブルからのデータを保持するビューを作成しました。
次に、ストアドプロシージャで、このような単純な一時テーブルを作成しました....
CREATE TABLE #TempSearchResults
(
search_id int identity,
id integer,
type varchar(20),
title varchar(50),
url varchar(250),
rank integer
)
次に、パフォーマンスを向上させる方法として、おそらく限られた経験で、それにインデックスを追加しました。
CREATE UNIQUE INDEX idx on #TempSearchResults (search_id)
次に、選択を大規模なクエリにしました
insert into #TempSearchResults
select id, type, title, url, rank + 1200 as rank
from my view
where company_id = @company_id
and title like @keyword
union all
select id, type, title, url, rank + 1100 as rank
from my view
where company_id = @company_id
and title like @keyword
and description like @keyword
そして、テーブル内でキーワードが見つかった場所に対して異なるランク計算値を持つように進みます。
そして最後にそれは...
select id, type, title, url, rank
from #TempSearchResults
group by id, type, title, url, rank
order by rank desc, title asc;
そのストアド プロシージャを coldfusion でテストすると、非常に時間がかかるようです。
だから私は、最適なパフォーマンスのために一時テーブルを間違って使用しているか、不完全に使用しているかのどちらかだと考えています。
または、おそらくテーブル変数に切り替える必要があります...
しかし、私はちょうど読んでいた...一時テーブルVSテーブル変数
面白いことに、このストアド プロシージャは、coldfusion を介してクエリを直接実行するよりも遅いように思われます。
最高のパフォーマンスを期待しています....
ありがとうございました...
以下は、私が使用しているビューの基本的なロジックまたはコードです。
select some field as id, some field as title, some field as description, 'url link' as url, 1 as rank
from table a
union
select some field as id, some field as title, some field as description, 'url link' as url, 1 as rank
from table b
union
select some field as id, some field as title, some field as description, 'url link' as url, 1 as rank
from table c
などなど。セキュリティ違反になるため、正確な詳細を明らかにすることはできません。それがより明確になることを願っています。