Хорошо, в основном я создаю хранимую процедуру, которая будет возвращать данные для нашего поиска мощности 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, кажется, что это занимает очень много времени.
Поэтому я думаю, что я использую временные таблицы неправильно или не полностью для оптимальной производительности.
Или, возможно, мне следует перейти к табличным переменным ...
Но я только что читал ... Temp Tables VS Table Variables
Забавно, эта хранимая процедура, кажется, медленнее, чем я, выполняющий запрос напрямую через 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
И т.д., как это. Я не могу раскрыть точные детали, так как это было бы нарушением безопасности. Я надеюсь, что это проясняет ситуацию.