Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Совет нужен / 10 сообщений из 10, страница 1 из 1
22.01.2002, 11:19
    #32021211
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
Имеются следующие таблицы
1.
create table mydates(record_id int NOT NULL IDENTITY (1, 1), mydate datetime NOT NULL UNIQUE)
которая должна содержать уникальные даты(без времени).

2. Основная таблица MainTable, в которой имеется поле agreement_date типа datetime (со временем)

3. Порция новых данных в таблице ImportTable, в которой также имеется поле agreement_date типа datetime (со временем).

Задача.
При добавлении записей из ImportTable в MainTable, нужно чтобы в таблицу Mydates добавились уникальные даты(!без времени!), которых там нет.
Что будет лучше:
- триггер на добавление в MainTable
- или в одной транзакции запросы для ImportTable и Mydates, и для ImportTable и MainTable

Дополнение.
Можно менять структуру Mydates, если есть необходимость.
Изменения структуры ImportTable и MainTable также возможны, но нежелательны.
...
Рейтинг: 0 / 0
22.01.2002, 12:12
    #32021220
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
Честно говоря, смущает постановка вопроса - что лучше ? Лучше по какому критерию ?
Например, такой вариант - таблицы MyDates вообще не нужна, те же самые уникальные
даты можно получать из таблицы MainTable не самым сложным запросом.
Если же из Ваших вариантов, то я лично предпочел бы вариант с триггером, так как он
выполняется в контексте своей транзакции, если отсутствует внешняя, и голова не болит
...
Рейтинг: 0 / 0
22.01.2002, 12:19
    #32021221
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
Да, конечно, забыл уточнить. Лучше с точки зрения быстродействия и времени блокировки объектов.


>даты можно получать из таблицы MainTable не самым сложным запросом
MainTable содержит 25 000 000 для каждого месяца, за год выходит минимум 250 000 000 записей. Запрос не сложный, только очень долгий.
...
Рейтинг: 0 / 0
22.01.2002, 12:40
    #32021222
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
Нда-с... Это впечатляет... Напоминает крупную сеть супермаркетов с
отслеживанием каждого чека, точнее даже, каждой позиции чека.
Новый вопрос: сколь часты обновления и какого объема ?
Даже если раз в день, это уже миллион записей, нехилая, однако,
транзакция. Создается впечатления, что лучше вообще без нее обойтись,
посредством bulk insert. Тогда безусловно, о триггере лучше забыть, в
MyDates добавлять отдельным запросом.
...
Рейтинг: 0 / 0
22.01.2002, 12:46
    #32021225
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
Вдогонку... С таким объемами лучше, пожалуй, было бы создать
по таблице MainTableNNN на каждый день года. В некоторых серверах,
в отличие от MS, есть так называемые табличные фрагменты, самое то...
Может сервер сменить, а ? Опять же у других есть и нормальный тип даты
...
Рейтинг: 0 / 0
22.01.2002, 15:10
    #32021243
MadDog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
2 Glory:

А что если в Вашу таблицу добавить еще одно поле, а саму таблицу заполнить на несколько лет вперед. Тогда в триггере в это поле можно проставлять пометку о наличии транзакций за эту дату в других таблицах.

В триггере у Вас было бы что-то вроде:
update mydates set Поле = 1
where Поле = 0 and mydate = @дата

т.е. update был бы только один, а все остальные разы - только выборка.
...
Рейтинг: 0 / 0
22.01.2002, 16:55
    #32021249
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
2ChA
На самом деле IMHO сейчас люди гараздо больше разговаривают по мобильным телефонам, чем делают покупки

Вообще-то поставленная в топике задача преследует целью заполнять таблицу Mydates как раз на этапе добавления очередной порции данных, а не "дергать" потом данные из основной таблицы. Максимальный размер добавляемой порции 1500 записей, с частотой 1 порция в 1-2 минуту, с 3-х коннектов.

2MadDog
Насчет заранее заполненной таблицы была идея. Но на самом деле я несколько упростил задачу, мне нужно хранить в Mydates записи уникальные с точностью до минуты. Т.е. на 2 года вперед в этой таблице будет
60*24*365*2=1051200 записей. Не то чтобы это много, но всего за 2 года... Это во-первых.
Во-вторых, никто не гарантирует, что в добавляемых данных будут даты из уже имеющихся в Mydates. А последующая выборка/проверка на основной таблице для поиска нескольких "пропавших" дат слишком "расточительное" по времени занятие. Подстраховка же и предварительное заполнение Mydates данными из очень большого диапазона раздует эту таблицу неимоверно.
...
Рейтинг: 0 / 0
22.01.2002, 18:26
    #32021253
MadDog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
2 Glory:
"Ну Вы, блин, даете"!
"на самом деле я несколько упростил задачу": "60*24", т.е. в 1440 раз


А если серьезно, почему бы, все-таки, не заполнять эту таблицу "вперед", пусть не на год, так на месяц, неделю. Если я правильно понял, там будет текущее время суток, т.е. никаких "задних" и "передних" дат? И хранить в этой таблице данные, соответственно за небольшой промежуток времени, и, время от времени, складывать в архив?
А зачем Вам эта таблица, что Вы с ней собираетесь делать? Может проясните, тогда и мысли какие-нибудь появятся...
...
Рейтинг: 0 / 0
22.01.2002, 18:56
    #32021256
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
Таблица Mydates будет использоваться в OLAP cube в качестве Time Dimension, поэтому в этой таблице обязательно должны содержаться все уникальные даты (с точностью до минуты) из MainTable. Иначе при создании OLAP cube туда не попадут все записи из MainTable, т.к. связь между Dimension и Fact таблицами строится как INNER.
...
Рейтинг: 0 / 0
22.01.2002, 19:19
    #32021257
MadDog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет нужен
Ну если OLAP, то Вам, скорее всего, не нужны данные "сию секунду"?
Если организовать промежуточную "короткую" таблицу, которая заполнена "вся", а из нее, по расписанию, подливать в "настоящую" mydates только нужные записи? "Короткую" по другому расписанию очищать и заполнять снова?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Совет нужен / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]