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

Откуда: Москва
Сообщений: 4804
Господа, вот скажите, почему TOP (1) PERCENT работает в 30 раз дольше, хотя делает тоже самое, что и первый запрос. У меня 1 секунда против 30. И планы этих запросов 50 на 50. Но по времени 1 к 30.

SET STATISTICS IO ON 

SELECT N = F.number * CAST(10001 AS BIGINT) + F1.number 
INTO #T1
FROM master..spt_values F, master..spt_values F1
WHERE (F.number * CAST(10001 AS BIGINT) + F1.number) % 100 = 0
GO
SET STATISTICS IO OFF

GO
SET STATISTICS IO ON 
SELECT TOP (1) PERCENT N = F.number * CAST(10001 AS BIGINT) + F1.number 
INTO #T2
FROM master..spt_values F, master..spt_values F1

SET STATISTICS IO OFF
GO
SET STATISTICS IO ON 

SELECT count(*)
FROM master..spt_values F, master..spt_values F1

GO
SET STATISTICS IO OFF


DROP TABLE #T1
DROP TABLE #T2
16 мар 15, 20:43    [17391570]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Потому что это нормально, когда разные запросы, возвращающие разный результат, работаю по-разному.

Сообщение было отредактировано: 16 мар 15, 20:47
16 мар 15, 20:46    [17391575]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Гавриленко Сергей Алексеевич
Потому что это нормально, когда разные запросы, возвращающие разный результат, работаю по-разному.


Только вот запросы возвращают весьма сходный результат +-5%, а различаются в 30 раз.
16 мар 15, 21:45    [17391844]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
a_voronin
Господа, вот скажите, почему TOP (1) PERCENT работает в 30 раз дольше, хотя делает тоже самое, что и первый запрос
Чтобы получить 1% от чего-то, нужно это чего-то иметь. Вот и спулится у вас 6 миллионов строк, а потом выбирается 1% от них.
16 мар 15, 21:51    [17391874]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Хотите быстро, пишите так:
SELECT TOP ((SELECT count(*) FROM master..spt_values F, master..spt_values F1) / 100) F.number * CAST(10001 AS BIGINT) + F1.number as N
INTO #t3
FROM master..spt_values F, master..spt_values F1
16 мар 15, 21:58    [17391889]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
Чтобы получить 1% от чего-то, нужно это чего-то иметь.


Утверждение логически неверное.

Чтобы получить 1% мировых запасов нефти, не надо заполучать 100% мировых запасов нефти.
Чтобы получить 1 л воды, не надо иметь бочку на 100 л.
Чтобы получить 65000 строк не надо генерить 6500000.
16 мар 15, 22:11    [17391924]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
a_voronin
Чтобы получить 1% мировых запасов нефти, не надо заполучать 100% мировых запасов нефти.
Чтобы получить 1 л воды, не надо иметь бочку на 100 л.
Чтобы получить 65000 строк не надо генерить 6500000.
Ваши рассуждения основаны на знании объема, от которого нужно получить 1%.
В общем случае, невозможно вычислить заранее сколько строк будет получено в результате соединения таблиц. Поэтому, чтобы взять 1% нужно сначала получить все строки.
Если вас не устраивает поведение оптимизатора в частном случае декартового произведения таблицы на саму себя - можете написать соответствующее предложение на коннекте.
16 мар 15, 22:39    [17392004]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
o-o
Guest
a_voronin
invm
Чтобы получить 1% от чего-то, нужно это чего-то иметь.

Утверждение логически неверное.

a_voronin, ну вы даете, это сильно.
а вы как оцениваете 1%, если не знаете все 100?
вот вы играете с кем-то на деньги, это кто-то говорит:
воронин, выбирай сразу:
если проиграешь, что предпочитаешь отдать, всю твою зарплату, или 1% от стоимости моей машинки?
вы вот так сразу сможете оценить, что выбрать?
на товарище не написано, ламборгини у него или раздолбанный москвич
16 мар 15, 22:46    [17392037]     Ответить | Цитировать Сообщить модератору
 Re: Почему тупит TOP (1) PERCENT  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
o-o
a_voronin
пропущено...

Утверждение логически неверное.

a_voronin, ну вы даете, это сильно.
а вы как оцениваете 1%, если не знаете все 100?
вот вы играете с кем-то на деньги, это кто-то говорит:
воронин, выбирай сразу:
если проиграешь, что предпочитаешь отдать, всю твою зарплату, или 1% от стоимости моей машинки?
вы вот так сразу сможете оценить, что выбрать?
на товарище не написано, ламборгини у него или раздолбанный москвич


рискну предположить, что если будет альтернатива типа "будем бить долго", то быстро оценит
17 мар 15, 09:25    [17392843]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить