Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
Имеются следующие таблицы 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 также возможны, но нежелательны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 11:19 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
Честно говоря, смущает постановка вопроса - что лучше ? Лучше по какому критерию ? Например, такой вариант - таблицы MyDates вообще не нужна, те же самые уникальные даты можно получать из таблицы MainTable не самым сложным запросом. Если же из Ваших вариантов, то я лично предпочел бы вариант с триггером, так как он выполняется в контексте своей транзакции, если отсутствует внешняя, и голова не болит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 12:12 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
Да, конечно, забыл уточнить. Лучше с точки зрения быстродействия и времени блокировки объектов. >даты можно получать из таблицы MainTable не самым сложным запросом MainTable содержит 25 000 000 для каждого месяца, за год выходит минимум 250 000 000 записей. Запрос не сложный, только очень долгий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 12:19 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
Нда-с... Это впечатляет... Напоминает крупную сеть супермаркетов с отслеживанием каждого чека, точнее даже, каждой позиции чека. Новый вопрос: сколь часты обновления и какого объема ? Даже если раз в день, это уже миллион записей, нехилая, однако, транзакция. Создается впечатления, что лучше вообще без нее обойтись, посредством bulk insert. Тогда безусловно, о триггере лучше забыть, в MyDates добавлять отдельным запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 12:40 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
Вдогонку... С таким объемами лучше, пожалуй, было бы создать по таблице MainTableNNN на каждый день года. В некоторых серверах, в отличие от MS, есть так называемые табличные фрагменты, самое то... Может сервер сменить, а ? Опять же у других есть и нормальный тип даты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 12:46 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
2 Glory: А что если в Вашу таблицу добавить еще одно поле, а саму таблицу заполнить на несколько лет вперед. Тогда в триггере в это поле можно проставлять пометку о наличии транзакций за эту дату в других таблицах. В триггере у Вас было бы что-то вроде: update mydates set Поле = 1 where Поле = 0 and mydate = @дата т.е. update был бы только один, а все остальные разы - только выборка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 15:10 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
2ChA На самом деле IMHO сейчас люди гараздо больше разговаривают по мобильным телефонам, чем делают покупки Вообще-то поставленная в топике задача преследует целью заполнять таблицу Mydates как раз на этапе добавления очередной порции данных, а не "дергать" потом данные из основной таблицы. Максимальный размер добавляемой порции 1500 записей, с частотой 1 порция в 1-2 минуту, с 3-х коннектов. 2MadDog Насчет заранее заполненной таблицы была идея. Но на самом деле я несколько упростил задачу, мне нужно хранить в Mydates записи уникальные с точностью до минуты. Т.е. на 2 года вперед в этой таблице будет 60*24*365*2=1051200 записей. Не то чтобы это много, но всего за 2 года... Это во-первых. Во-вторых, никто не гарантирует, что в добавляемых данных будут даты из уже имеющихся в Mydates. А последующая выборка/проверка на основной таблице для поиска нескольких "пропавших" дат слишком "расточительное" по времени занятие. Подстраховка же и предварительное заполнение Mydates данными из очень большого диапазона раздует эту таблицу неимоверно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 16:55 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
2 Glory: "Ну Вы, блин, даете"! "на самом деле я несколько упростил задачу": "60*24", т.е. в 1440 раз А если серьезно, почему бы, все-таки, не заполнять эту таблицу "вперед", пусть не на год, так на месяц, неделю. Если я правильно понял, там будет текущее время суток, т.е. никаких "задних" и "передних" дат? И хранить в этой таблице данные, соответственно за небольшой промежуток времени, и, время от времени, складывать в архив? А зачем Вам эта таблица, что Вы с ней собираетесь делать? Может проясните, тогда и мысли какие-нибудь появятся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 18:26 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
Таблица Mydates будет использоваться в OLAP cube в качестве Time Dimension, поэтому в этой таблице обязательно должны содержаться все уникальные даты (с точностью до минуты) из MainTable. Иначе при создании OLAP cube туда не попадут все записи из MainTable, т.к. связь между Dimension и Fact таблицами строится как INNER. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 18:56 |
|
||
|
Совет нужен
|
|||
|---|---|---|---|
|
#18+
Ну если OLAP, то Вам, скорее всего, не нужны данные "сию секунду"? Если организовать промежуточную "короткую" таблицу, которая заполнена "вся", а из нее, по расписанию, подливать в "настоящую" mydates только нужные записи? "Короткую" по другому расписанию очищать и заполнять снова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 19:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32021220&tid=1824238]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 397ms |

| 0 / 0 |
