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

Откуда: Новосибирск
Сообщений: 44
Я никак не могу просечь этот SQL-сервер в плане скорости. И вообще- может кто-то что-то подскажет - как что-то можно сделать иначе?
Есть такой набор команд, который по задумке перенесется в ХП:

1)
-- подготовить временную таблицу для конечной выборки

select * into #FirmInfo from ... ну не суть важно, в общем выбираем по условиям из неких таблиц (основная из них относительно небольшая - ~15тыс. записей). В результате выбора остается 74 записи (в таблице #FirmInfo).

**Выполняется 1,5 сек.**

2)
-- перекопируем в новую таблицу для задания сортировки в одном месте
-- ну запрос выше (в 1) он из нескольких кусков и не хотелось бы там в каждом куске вставлять условия сортировки, которые периодически модифицируются. В принципе я прекрасно понимаю, что этот кусок можно и убрать; но это не суть вопроса
-- за одно здесь в таблицу #Temp добавляется поле OrderNums varchar(128)

select *, cast('' as varchar(128)) as OrderNums into #Temp
from #FirmInfo
order by ShortStreetName, NNum, NumDrob, Korpus, Flor, Office

**Выполняется 1,5 сек.!!!**

3)
-- пронумеровать строки (ну вот так я придумал; может кто знает способ лучше?)
alter table #Temp add [RowNum] int identity(1,1)
select * into #Dest from #Temp

копируется в #Dest из-за того, что иначе эта штука не видит добавленное поле [RowNum] в таблице #Temp; а вот в #Dest уже видит...

**Выполняется 3,8 сек.!!!!!!!**

--------------------------------------------------------

Итак, выше приведено время выполнения каждого "этапа". Основной вопрос: почему так долго?! Ну ладно, пусть в 1) выборка из таблицы, но ведь дальше-то идет работа всего в 74 записями! Т.е. в каждой временной таблице всего 74 записи, почему же они обрабатываются по 1,5 секунды на SQL-команду?

Буду очень благодарен за любые комментарии.
3 апр 03, 08:52    [163233]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
V. Motchulsky
Guest
А Вы посмотрите план выполнения в QA и сами поймете. Скорее всего неправильные обединения или отсутствующие необходимые индексы.
3 апр 03, 10:10    [163318]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
Sergey Kasatkin
Member

Откуда: Новосибирск
Сообщений: 44
Да что-то не хочет он план для временных табилц показывать... Invalid object name '#t' пишет...

Впрочем, индексов там никаких и нет! Я же говорю - в этих временных таблица - по 74 записи всего! Но почему же так долго?
3 апр 03, 12:14    [163582]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А в таблицах-источниках индексы есть?
3 апр 03, 12:24    [163597]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
genie_vats
Member

Откуда: Окраина, Харьков
Сообщений: 147
Вместо select * into #tmp -

create table #tmp (your fields)
insert into #tmp

должно быть быстрее.

А еще лучше, если записей немного
declare @tmp table (your fields) - еще быстрее. (:
3 апр 03, 12:35    [163618]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
select *, cast('' as varchar(128)) as OrderNums, RowNum= identity(int,1,1)
into #Temp
from #FirmInfo
order by ShortStreetName, NNum, NumDrob, Korpus, Flor, Office
3 апр 03, 13:10    [163704]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
V. Motchulsky
Guest
Запхайте все в одну сохраненную процедуру и тогда смотрите план ее выполнения. Все будет расписанно по операторах.
3 апр 03, 13:42    [163777]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
Sergey Kasatkin
Member

Откуда: Новосибирск
Сообщений: 44
Спасибо всем поучаствовавшим.

>select *, cast('' as varchar(128)) as OrderNums, RowNum= identity(int,1,1)
>into #Temp
>from #FirmInfo
>order by ShortStreetName, NNum, NumDrob, Korpus, Flor, Office

Клево, но эта зараза расставляет номера не в порядке order (берусь предположить, что в порядке исходной таблицы). А надо, понятно, чтобы было по порядку для отсортированного по параметрам в order by
А вообще это бешенно подняло скорость.. попробую порыть в этом направлении...

>Запхайте все в одну сохраненную процедуру и тогда смотрите план ее >выполнения. Все будет расписанно по операторах.

Запихал в SP. Странно, план выполнения все равно не показывает - ругается на первую же встреченную временную таблицу
Invalid object name '#FirmInfo'.
Это у всех так, или планы процедур никто никогда не смотрел? Или я что-то недопонимаю?
3 апр 03, 14:53    [163935]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
V. Motchulsky
Guest
Запускаю у себя. В SP 4 временные таблицы. Работает.
3 апр 03, 15:55    [164027]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
Sergey Kasatkin
Member

Откуда: Новосибирск
Сообщений: 44
>V. Motchulsky

Я был бы очень признателен, если бы вы выслали мне текст Вашей SP на e-mail.
s_wr@mail.ru
Хотябы просто для общего развития...
3 апр 03, 17:07    [164089]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
Клево, но эта зараза расставляет номера не в порядке order
select a.*,OrderNums=cast('' as varchar(128)) ,RowNum= identity(int,1,1) 

into #Temp
from (select top 100 persent *
from #FirmInfo
order by ShortStreetName, NNum, NumDrob, Korpus, Flor, Office)a
3 апр 03, 17:16    [164107]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
очАпЯтка... persent ->percent
3 апр 03, 17:19    [164112]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
V. Motchulsky
Guest
>Я был бы очень признателен, если бы вы выслали мне текст Вашей SP на e-mail.

Для начала попробуйте:

ALTER PROCEDURE test 


AS

SET NOCOUNT ON

Select 1 as Col1, 2 as Col2 into #tmp1

select Col2 into #tmp2 FROM #tmp1

Alter table #tmp1 drop column Col2

exec('Select * from #tmp1')
3 апр 03, 17:29    [164127]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
Sergey Kasatkin
Member

Откуда: Новосибирск
Сообщений: 44
Попробовал

create PROCEDURE test
AS
SET NOCOUNT ON
Select 1 as Col1, 2 as Col2 into #tmp1
select Col2 into #tmp2 FROM #tmp1 -- !!!!!!!!
Alter table #tmp1 drop column Col2
exec('Select * from #tmp1')

Выполняется - отлично (exec Test). При нажатии на кнопку "план исполнения" - посылает Invalid object name '#tmp1', указывая на выделенную строчку...

Впрочем, когда я заменил select ...into на создание таблицы и insert в нее - все побежало быстро... Это что - стандартный глюк select ...into?
(что еще интересно: первый раз процедура выполняется то же время, как и с into, а вот последующие разы - очень быстро. Думал дисковые кэш - нет, запустил утром (после ночных бэкапов и т.д. - явно никакого кэш и в помине не осталось) - так же шустро... С select into работает одинаково долго что при первом запуске, что при последующих...)
4 апр 03, 08:52    [164475]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
V. Motchulsky
Guest
> Sergey Kasatkin
В QA меню >Query>Show Execution Plan нажимаем и тогда делаем exec test и ...
конец разочарованием и всем нашим страданиям - наступает счастливая пора (Вини Пух).
4 апр 03, 11:07    [164654]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, как это все оптимизировать  [new]
Sergey Kasatkin
Member

Откуда: Новосибирск
Сообщений: 44
>V. Motchulsky
Ух ты.. Занимательно.. Спасибо!
4 апр 03, 13:13    [164895]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить