MS SQL: Где хранить итоги

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

MS SQL: Где хранить итоги

Сообщение StillZero »

Ситуация:
есть таблица заказов, есть две дочерние таблицы: выполненная работа по данному заказу и израсходованные запчасти заказа.

Т.е. получается есть шапка и содержание.

Соответственно есть итоги по сумме запчастей, сумме ремонта и итого (сумма ремонта+сумма запчастей).

На TOPSPEED я хранил эти итоги в шапке заказа.

Теперь переходим на SQL. Есть ли смысл хранить эти итоги, или считать их каждый раз, когда потребуется?

По объему данных: каждый месяц печатается отчет, содержащий примерно 1000 заказов, в каждом заказе по 3 ремонта и по 3 запчасти в среднем. Т.е. итого получаем 7000 записей.
Будет ли ощутимая разница в скорости при обработке 1000 или 7000 записей?
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение ru_alex »

Теперь переходим на SQL. Есть ли смысл хранить эти итоги, или считать их каждый раз, когда потребуется?

По объему данных: каждый месяц печатается отчет, содержащий примерно 1000 заказов, в каждом заказе по 3 ремонта и по 3 запчасти в среднем. Т.е. итого получаем 7000 записей.
Будет ли ощутимая разница в скорости при обработке 1000 или 7000 записей?
Конечно зависит от сервака, но из моего опыта, MSSQL на Celeron2500, 512 Mb разница будет практически не заметна на 1000 или на 7000 записей, а на клиента передается всего одна запись., так что тормозов быть не должно.
И в этом случае не надо заморачиваться по пересчету данных, хотя в MSSQL, наверное, можно и trigger соответствующий навесить, тоже без проблем.

Короче, лучше попробовать и так, и так и сравнить :)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: MS SQL: Где хранить итоги

Сообщение Andrew™ »

StillZero писал(а):Ситуация:
есть таблица заказов, есть две дочерние таблицы: выполненная работа по данному заказу и израсходованные запчасти заказа.

Т.е. получается есть шапка и содержание.

Соответственно есть итоги по сумме запчастей, сумме ремонта и итого (сумма ремонта+сумма запчастей).

На TOPSPEED я хранил эти итоги в шапке заказа.

Теперь переходим на SQL. Есть ли смысл хранить эти итоги, или считать их каждый раз, когда потребуется?

По объему данных: каждый месяц печатается отчет, содержащий примерно 1000 заказов, в каждом заказе по 3 ремонта и по 3 запчасти в среднем. Т.е. итого получаем 7000 записей.
Будет ли ощутимая разница в скорости при обработке 1000 или 7000 записей?
храни как в TOPSPEED'е в шапке, а инициализируй через триггера на позиции
lsgsoftware
Ветеран
Сообщения: 311
Зарегистрирован: 08 Июль 2005, 22:04

Сообщение lsgsoftware »

С такими задачами я ковыряюсь уже много лет.Пример-счет фактура,где есть шапка(покупатель, продавец, дата и т.п.) и список товаров,заранее неизвестного объема(счет может идти на сотни и сотни позиций).Так вот уже давно я пересчитываю итоги при добавлении новых позиций.Реализации на DAT,TPS,MYSQL.Объемы таблиц более чем приличные и тормозов нет.А хранить итоги в шапке целесообразно только тогда, когда документ заведомо маленький, делается за один раз и в него не вносят исправлений.Если же документ корректируется(например, ввели не тот товар и затем его удали), то все равно придется делать пересчет после каждой корректировки.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

lsgsoftware писал(а):С такими задачами я ковыряюсь уже много лет.Пример-счет фактура,где есть шапка(покупатель, продавец, дата и т.п.) и список товаров,заранее неизвестного объема(счет может идти на сотни и сотни позиций).Так вот уже давно я пересчитываю итоги при добавлении новых позиций.Реализации на DAT,TPS,MYSQL.Объемы таблиц более чем приличные и тормозов нет.А хранить итоги в шапке целесообразно только тогда, когда документ заведомо маленький, делается за один раз и в него не вносят исправлений.Если же документ корректируется(например, ввели не тот товар и затем его удали), то все равно придется делать пересчет после каждой корректировки.
ну а какие проблемы, в триггерах даже не пересчёт, а вот такие конструкции

update Шапка SET ИТОГ=ИТОГ-DELETED.SUMMA
update Шапка SET ИТОГ=ИТОГ+INSERTED.SUMMA

замечу - что тут не пересчёт по всем позициям - а изменение итога в шапке применительно по позициям которые реально изменились, добавились, либо удалились

в MSSQL триггер может сработать и на групповую операцию и в inserted и deleted курсорах может быть более одной записи
Ответить