16.03.2010, 23:55 | #1 |
----------------
|
Почему я не доверяю временным таблицам
Использование временных таблиц весьма удобно, по сравнению с другими формами хранения временных коллекций. И часто, как-то забывается, что они не являются полноценными таблицами.
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(); } И в этом случаи, индекс на временной таблице помогает, но редко кто о нем задумывается пока не надо будет сдавать отчетность за квартал-полгода. 2. Временная таблица, по мнению Аксапты, может быть перемещена на диск, если достигла какого-то предела в размерах (где-то была дока, которая более подробно об этом говорила). После такого подвоха работа с ней превращается в постоянное дерганье диска, что ну никак не увеличивает скорость. Я так и не научился предугадывать и ловить этот "счастливый" момент... всегда становится неприятной неожиданностью. 3. Место хранение либо клиент, либо сервер, хотя чаше хочется создать на сервере, а использовать на клиенте, что приводит к многочисленным обменам клиент-сервер. Итого: когда встречаю в чей-то разработке временную таблицу заполняемую неопределенным объемом данным, отмечаю для себя, что надо либо протестировать на большом объеме, либо постараться не использовать для больших выборок. |
|
|
За это сообщение автора поблагодарили: mazzy (2), belugin (3), zemlyn (1), konopello (2). |