Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 что быстрее работает?  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Здравствуйте
Ситуация: Есть запрос
SELECT 
l.rdate,l.debet,l.kredit,l.danal,l.kanal
--l.* ,' ',lk.*
	from Lexbuh l (nolock) 
		JOIN LexVAKdata lk (nolock) ON l.VCode=lk.pcode
	where l.kanal=12456
		and lk.acode=705419
UNION all
SELECT l.rdate,l.debet,l.kredit,l.danal,l.kanal
--l.* ,' ',ld.*
	from Lexbuh l (nolock) 
		JOIN LexVADdata ld (nolock) ON l.VCode=ld.pcode
	where l.kanal=12456
		and ld.acode=705419

Вопрос:
что быстрее будет работать? этот union или сначала объявить временную табличку, и по очереди в неё сбросить каждый select, а потом вывести саму временную табличку
20 фев 15, 07:24    [17290762]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
Maksym_t
Member

Откуда: Екатеринбург
Сообщений: 29
R-Magistr,

Он, что медленно работает? В чем проблема то.
Если проблема в производительности, посмотрите план запроса, там видно будет почему возникает проблема.
20 фев 15, 08:16    [17290857]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Maksym_t,

Большое спасибо ))
20 фев 15, 08:17    [17290864]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
R-Magistr,

Конечно, без упражнений с временной таблицей будет быстрее.
20 фев 15, 08:17    [17290865]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
baza906
Member

Откуда:
Сообщений: 283
R-Magistr, смысл скидывать предварительно во временные таблицы может быть только в случае проведения каких - либо сложных предварительных вычислений/действий, результаты которых нужно в дальнейшем использовать (чтобы сервер их сделал 1 раз и сохранил у себя, а не пересчитывал каждый раз). В вашем же случае - просто обыкновенный SELECT, чтение таблиц - быстрое действие.
20 фев 15, 09:20    [17291059]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT 
l.rdate,l.debet,l.kredit,l.danal,l.kanal
	from Lexbuh l (nolock) 
	where l.kanal=12456
		and (exists(SELECT * from LexVAKdata lk (nolock) where l.VCode=lk.pcode and lk.acode=705419)
		or   exists(SELECT * from LexVADdata ld (nolock) where l.VCode=ld.pcode and ld.acode=705419))

На LexVAKdata и LexVADdata нужны индексы по acode и VCode
20 фев 15, 09:25    [17291077]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
R-Magistr,
SELECT
  l.rdate,l.debet,l.kredit,l.danal,l.kanal
from Lexbuh l (nolock)
  left join LexVAKdata lk (nolock) on lk.pcode = l.VCode and lk.acode=705419
  left join LexVADdata ld (nolock) on ld.pcode = l.VCode and ld.acode=705419
where l.kanal=12456 and (lk.pcode is not null or ld.pcode is not null)
20 фев 15, 10:15    [17291291]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
КроликЗануда
Guest
оба примера вроде как не подходят, так как в оригинальном запросе UNION ALL
21 фев 15, 14:11    [17296931]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
R-Magistr
что быстрее будет работать? этот union или сначала объявить временную табличку, и по очереди в неё сбросить каждый select, а потом вывести саму временную табличку
Быстрее UNION ALL
UNION ALL может работать медленее при сложных запросах, когда сервер ошибается при построении плана, но это явно не тот случай.
21 фев 15, 21:20    [17297572]     Ответить | Цитировать Сообщить модератору
 Re: что быстрее работает?  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
КроликЗануда,

Сажусь, два! Such a shame!
21 фев 15, 21:42    [17297614]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить