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