Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
Решил я свой тест для серверов по перебору "счасливых билетиков" попробовать исправить с временных таблиц на таблицы-переменные. И что меня удивило - таблицы-переменные работают медленнее! Не намного, где-то на 20-30%, но медленнее. Это интересно у всех так или только у меня? create table #t(i int) insert #t select 1 insert #t select 2 insert #t select 3 insert #t select 4 insert #t select 5 insert #t select 6 insert #t select 7 insert #t select 8 insert #t select 9 insert #t select 0 set nocount on declare @t table(i int) insert @t select 1 insert @t select 2 insert @t select 3 insert @t select 4 insert @t select 5 insert @t select 6 insert @t select 7 insert @t select 8 insert @t select 9 insert @t select 0 declare @d datetime select @d=getdate() select count(*) from #t t1, #t t2,#t t3,#t t4,#t t5,#t t6 where t1.i+t2.i+t3.i=t4.i+t5.i+t6.i select datediff(ms,@d,getdate()) tmp select @d=getdate() select count(*) from @t t1, @t t2,@t t3,@t t4,@t t5,@t t6 where t1.i+t2.i+t3.i=t4.i+t5.i+t6.i select datediff(ms,@d,getdate()) per ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 14:02 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
А можно поинтересоваться, в чем специфическое применение таблиц-переменных. Проще говоря, на кой они вообще нужны, что позволяють сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 14:23 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
А у меня быстрее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 14:26 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
и у меня быстрее первый раз tmp ----------- 2030 ----------- per ----------- 1750 потом tmp ----------- 1796 per ----------- 1733 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 16:29 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
А у меня где-то 3700 на 4500. На более медленном сервере получается вообще 6000 на 10000 Вот такая вот загогулина ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 17:21 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
2AnKa Внутри функции нельзя использовать временные таблицы, а таблицы-переменные можно. К тому же последние по идее распологаются в памяти и должны работать быстрее. Живут они только во время жизни пакета и их не надо drop-ать(но зато и не посмотреть содержимое после выполнения запоса). Собственно и вся разница. Я хотел везде заменить временные таблицы на таблицы-переменные, но теперь растерялси. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 17:30 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
SergSuper: Спасибо, к сожалению, мне этого не понять - я с 7.0 работаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 17:40 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
Действительно удивительно. В моих экспериментах получается, что для вот таких детских примеров переменные всегда оказываются быстрее таблиц. Даже на сравнительно больших объемах insertы в переменные работают быстрее, чем во временные таблицы (лишь бы памяти хватало). Я не берусь советовать, что лучше, п.ч. все хорошо в свое время. Напр., table variables не вызывают перекомпиляции хранимых процедур (или, если говорить аккуратно, вызывают в меньшем числе случаев), т.к. при их создании / удалении в сист.каталоги ничего не пишется, операции над ними не фиксируются в логе и т.д. С другой стороны, над ними нельзя создавать индексы / статистику, поэтому, если число записей велико, то оптимизатору все-таки приятней работать с врем.табл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 22:52 |
|
||
|
Временные таблицы и переменные-таблицы
|
|||
|---|---|---|---|
|
#18+
У меня таблицы-переменные работают медленнo. Чтобы узнать в чем дело, сделал такой тест. п.1. Создал функцию, возвращающую таблицу-результат из одного столбца CREATE FUNCTION FAE (@BALANCE INTEGER, @SCHET VARCHAR(, @END_DATE DATETIME, @KOD_DK BIGINT, @KOD_MATER BIGINT) RETURNS @RESULT TABLE (RESULT MONEY) AS BEGIN INSERT INTO @RESULT SELECT DEBET-KREDIT FROM GET_SCHET_REST(@BALANCE, @SCHET, @END_DATE, @KOD_DK, @KOD_MATER, 1); RETURN; END п.2. Создал функцию, возвращающую скалярный результат. CREATE FUNCTION FAE1 (@BALANCE INTEGER, @SCHET VARCHAR(, @END_DATE DATETIME, @KOD_DK BIGINT, @KOD_MATER BIGINT) RETURNS MONEY AS BEGIN DECLARE @RESULT MONEY; SELECT @RESULT = DEBET-KREDIT FROM GET_SCHET_REST(@BALANCE, @SCHET, @END_DATE, @KOD_DK, @KOD_MATER, 1); RETURN @RESULT; END Время вызова 10000 раз п.1 намного (5-6) больше п.2. И проц загружало на 100% п.1, и 30-90% п.2. Странно, наверно не очень-то отлизал MS работу с новым (безусловно инновационным и рульным) типом данных. Где-то на уровне ядра тормозит при работе с переменными-таблицами (толи при создании, толи при манипуляции....) Может поправят в SP1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 17:28 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32005755&tid=1826718]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 409ms |

| 0 / 0 |
