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

Откуда: Киев
Сообщений: 30817
Почему-то не работает запрос, использующий таблицу-переменную:
declare @tt table (
	Entry int  ,
	QtyLeft numeric(18, 5),
	QtyApp numeric(18, 5) NULL ,
	ItemID int ,
	AppBit tinyint,
	PostDate smalldatetime)

... успешно заполняем @tt данными

select *
  FROM (SELECT t.ItemID, MIN(t.Entry) AS MinEntry
        FROM @tt t,(SELECT  ItemID, MIN(PostDate) AS MinDate
                            FROM  @tt
                            WHERE QtyLeft > 0
                            GROUP BY ItemID) t2
        where t.ItemID = t2.ItemID AND t.PostDate = t2.MinDate
                             GROUP BY t.ItemID) vFIFO , @tt ttt
                 where vFIFO.MinEntry = ttt.Entry
QA бесконечно ждет результатов select. Никаких ошибок :(
Игра с алиасами таблиц ничего не дала... :(

select использует view (запрос в скобках), которая в свою очередь использует view и всё это на одну и ту же таблицу... :)
А вот select использующий view (но без view 2-го уровня) работает нормально.
Выходит, что 3-уровневая вложенность запроса противопоказана таблицам-переменным ? :(

Задача запроса: у каждого ItemID найти минимальный Entry для минимальной даты. Иначе как двухуровневой вьюхой я не знаю как это получить :(

причём запрос нормально работает на аналогичной обычной таблице.
работа с таблицей-переменной связана с многозадачной работой ХП.
Есть какие нибудь мысли ? Сорри за сумбур... сложно стройно описать ситуацию.
17 дек 04, 13:53    [1189056]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
а скока строк в @tt ?
вообще нельзя дождаться окончания запроса или просто дольше?
а если pk и индексы навесить?
17 дек 04, 13:56    [1189073]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
- Компиляция скрипта проходит ?
- Предварительный план выполнения вы можете получить ?
- Переписать запрос с использованием явных JOIN-ов не пробовали ?
17 дек 04, 14:02    [1189104]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
С обычной таблицей запрос выполняется 5 - 10 сек
Индексы в обычной таблице только замедляли процесс :) Разносторонне проверял :)
Строк менее 100тыс.
Ждал более 3-х минут... Неужели мало ждал ?
17 дек 04, 14:06    [1189130]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Если попробовать заменить таблицу-переменную на временную таблицу?
17 дек 04, 14:09    [1189147]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
LSV
С обычной таблицей запрос выполняется 5 - 10 сек
Индексы в обычной таблице только замедляли процесс :) Разносторонне проверял :)
Строк менее 100тыс.
Ждал более 3-х минут... Неужели мало ждал ?

а хотя бы pk в обычной таблице тоже не было?
17 дек 04, 14:11    [1189157]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Glory
- Компиляция скрипта проходит ?
- Предварительный план выполнения вы можете получить ?
- Переписать запрос с использованием явных JOIN-ов не пробовали ?

В QA проходит.
План запроса в QA проходит
Джоины тоже пробовал.

Есть новость: в определение таблицы вставил "Entry int PRIMARY KEY"
и ... заработало... но выполнило за 2 мин. И это вместо 3 сек на простой таблице :(

Переписать под врем.таблицу попробую. Просто не думал, что будут такие праблы с переменной :(
Как можно поднять производительность ? Ранее не сталкивался с такой проблемой :(
17 дек 04, 14:56    [1189443]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Переписка под временную таблицу помогла :)
Всё работает и скорость на должном уровне... ! :)
А вот осадок остался... Почему таблицы-переменные так тормозят ?
17 дек 04, 15:26    [1189606]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
А вот осадок остался... Почему таблицы-переменные так тормозят ?

А вы у базовой таблицы тоже уберите индексы и посмотрите что будет.
17 дек 04, 15:27    [1189614]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Glory
А вы у базовой таблицы тоже уберите индексы и посмотрите что будет.

Я уже писал, что добавление индексов ухудшает ситуацию... :)
Таблица очень узкая и все запросы по ней покрывают её целиком. Тут использование индексов не помогает.
17 дек 04, 17:26    [1190094]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с Таблицей-переменной  [new]
Crimean
Member

Откуда:
Сообщений: 13148
автор
Задача запроса: у каждого ItemID найти минимальный Entry для минимальной даты


select * from @tt a
where not exists
(	select 1 from @tt b
	where	b.ItemId = a.ItemId
	and	(	b.PostDate < a.PostDate 

		or	(	b.PostDate	= a.PostDate
			and	b.Entry		< a.Entry
			)

		)
)
17 дек 04, 18:04    [1190196]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить