powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Совет нужен
10 сообщений из 10, страница 1 из 1
Совет нужен
    #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
Совет нужен
    #32021220
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, смущает постановка вопроса - что лучше ? Лучше по какому критерию ?
Например, такой вариант - таблицы MyDates вообще не нужна, те же самые уникальные
даты можно получать из таблицы MainTable не самым сложным запросом.
Если же из Ваших вариантов, то я лично предпочел бы вариант с триггером, так как он
выполняется в контексте своей транзакции, если отсутствует внешняя, и голова не болит
...
Рейтинг: 0 / 0
Совет нужен
    #32021221
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, конечно, забыл уточнить. Лучше с точки зрения быстродействия и времени блокировки объектов.


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

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

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

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

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

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


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


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