Что я должен использовать для повышения производительности. Просмотр / Запрос / Временная таблица - PullRequest
0 голосов
/ 10 июня 2010

Я хочу знать производительность использования Views, Temp Tables and Direct Queries Использование в хранимой процедуре.

У меня есть таблица, которая создается каждый раз, когда срабатывает триггер.Я знаю, что этот триггер будет срабатывать очень редко и только один раз во время установки.

Теперь мне нужно использовать эту созданную таблицу из триггеров во многих местах для извлечения данных, и я подтверждаю эточто никто не вносит никаких изменений в эту таблицу.то есть ReadOnly Таблица.

Я должен использовать эти данные таблиц вместе с несколькими таблицами, чтобы объединить и получить результат для дальнейших запросов, скажем

select * from triggertable

Используя Tempтаблица

select ... into #tx from triggertable join t2 join t3 and so  on

select a,b, c from #tx --do something
select d,e,f from #tx ---do somethign
--and so on 
--around 6-7 queries in a row in a stored procedure.

с использованием представлений

create view viewname
(
select ... from triggertable join t2 join t3 and so  on
)

select a,b, c from viewname --do something
select d,e,f from viewname ---do somethign
--and so on 
--around 6-7 queries in a row in a stored procedure.

Этот вид можно использовать и в других местах.Поэтому я буду создавать в базе данных, а не в sp

с помощью прямого запроса

select a,b, c from select ... into #tx from triggertable join t2 join t3 join ... --do something
select a,b, c from select ... into #tx from triggertable join t2 join t3 join ... --do something
.
.
--and so on 
--around 6-7 queries in a row in a stored procedure.

Теперь я могу создать представление / временную таблицу / напрямуюиспользование запросов во всех последующих запросах.

Что лучше всего использовать в этом случае.

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Если triggertable создается только один раз во время настройки, просто запросите таблицу напрямую.Если вы оберните свои SQL-запросы в транзакцию, которая должна помешать другим пользователям обновлять triggertable во время его запроса.

Использование представления в этой ситуации не дает никаких преимуществ.

Выможет скопировать triggertable во временную таблицу, но я не вижу реальной выгоды в этой ситуации.

0 голосов
/ 10 июня 2010

Всегда ли объединяются данные из одного и того же источника? В этом случае индекс в представлении может улучшить производительность.

Единственная причина, по которой я вижу временную таблицу, заключается в том, что у вас есть WHERE, которая выбирает небольшое подмножество, которое могут использовать все последующие 6-7 запросов, но вы не указали ни того, ни другого в вашем вопросе.

Обе опции могут использоваться совместно, но есть и другие факторы, которые вы не упоминаете, такие как размер общих данных и т. Д.

В противном случае я бы не стал беспокоиться и просто запросить таблицы напрямую, как это было бы select triggertable.a, t2.b, t3.c from triggertable join t2 join t3 ...

...