AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2010, 23:55   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Почему я не доверяю временным таблицам
Использование временных таблиц весьма удобно, по сравнению с другими формами хранения временных коллекций. И часто, как-то забывается, что они не являются полноценными таблицами.

1. Любимая многими схема использования временной таблицы для группировки данных, особенно часто встречается в отчетах:
X++:
	TransTable	trans;	// постоянная таблица каких-то строк
	TmpTable	tmpTable;	// временная таблица

	while select trans
		where trans.Tratata <= "tititi" &&
			trans.LaLaLa >= "gogogo"
	{
		select firstonly tmpTable
			where tmpTable.Field1 == trans.SomeRefId &&
				tmpTable.Date1 == trans.TransDate;
		
		if(! tmpTable)
		{
			tmpTable.initFromTrans(trans);
		}

		tmpTable.Amount += trans.Amount;
		tmpTable.Qty += trans.Qty;

		tmpTable.write();
	}
Такой код замечательно работает до 1000 записей, но чем дальше, тем все хуже и хуже, потому что с каждым циклом время на 1 итерацию увеличивается... 5000 вообще сложно дождаться.
И в этом случаи, индекс на временной таблице помогает, но редко кто о нем задумывается пока не надо будет сдавать отчетность за квартал-полгода.

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

3. Место хранение либо клиент, либо сервер, хотя чаше хочется создать на сервере, а использовать на клиенте, что приводит к многочисленным обменам клиент-сервер.

Итого: когда встречаю в чей-то разработке временную таблицу заполняемую неопределенным объемом данным, отмечаю для себя, что надо либо протестировать на большом объеме, либо постараться не использовать для больших выборок.
За это сообщение автора поблагодарили: mazzy (2), belugin (3), zemlyn (1), konopello (2).
Теги
временная таблица, полезное, производительность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Почему loka DAX: Программирование 2 01.12.2005 17:36
Почему такое расхождение в скорости выполнения Владимир Максимов DAX: Программирование 28 11.09.2004 12:44
Вопрос по временным таблицам Кирилл DAX: Программирование 3 15.04.2004 14:09
Запросы к временным таблицам или group by Anais DAX: Программирование 4 23.03.2004 12:48
почему форма сразу закрывается ? puz DAX: Программирование 3 09.09.2003 11:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:10.