![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Akina |
|
||||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Имеется 2 таблицы.
Таблица 1 (Name = DT) - результаты измерения датчиков.
Первичный индекс - конкатенация полей DDT и CatID. Для каждого CatID значения DV являются монотонно возрастающими по времени, т.е. если DDT1>DDT2, то гарантированно DV1>DV2. Таблица 2 (Name = TT) - весовые коэффициенты измерений.
Первичный индекс - конкатенация полей TDT и CatID. CatID обоих таблиц ссылается на одну и ту же таблицу. Штампы времени в таблицах по каждой категории выглядят так:
т.е. штамп времени начала гарантированно совпадает, промежуточные могут совпадать, могут НЕ совпадать, последний штамп времени таблицы DT заведомо позднее поледнего штампа времени таблицы TT. Задача: получить выборку, содержащую след. данные: DDT CatID DV DeltaDV (изменение DV по отношению к предыдущему по штампу времени значению в той же категории) TV (действующий на момент измерения весовой коэффициент) Вроде ничего особо сложного, если бы не одно маленькое НО - количество записей. А именно порядка 5-10 млн. в DT и 1-2 млн. в TT. Есть ли возможность выкрутиться? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
Никаких ограничений нет? так даже выбор из одной таблицы 5-10 млн записей никак не может происходить быстро. И какая связь между указанными таблицами? Куда ссылается внешний ключ СatID?
|
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
нет
да знаю... речь не идет о том чтобы упихать это в секунды. К тому же результат не будет подаваться на клиента - он будет использоваться тут же, на сервере, как сырец для дальнейшей работы. Прямой - нет. На таблицу категорий. Считай что ее структура проста:
а таблицы тупо привязаны много к одному для дальнейшей трансформации в текст. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
Всё равно не понимаю, что тебе надо выдать... Как должна вернуться информация, если приведённые тобой таблицы не связываются "напрямую"?
А если используется "как сырец" на сервере - неужели будет обрабатываться каждый раз всё скопом? Или всё же по чём-то будет делать выбор? Если собираешь засыпать сервер обработкой 5-10 млн записей, у тебя есть большой.. просто преогромный шанс засыпать его-таки ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Поясню дальнейшее - когда будет получена промежуточная таблица (не временная!), она будет обрабатываться группировкой записей по интервалам и подсчетом сумм в интервалах, после чего полученные суммы будут исследоваться на наличие гармонических колебаний. Т.е. будут искаться периодические составляющие процесса. Однако выборка получается один раз - в твердой копии, т.е. будет Insert Into, и потом она прогоняется через алгоритм немеряное количество раз с разными размерами интервала. Дело в том что некоторые периоды, которые должны быть, уже известны заранее, и они будут пробоваться в первую очередь, лишь потом начинается неспешное сканирование всех возможных периодов... так вот - именно этот первичный результат надо дать быстро. К сожалению, возможность получения переопределенной таблицы (в момент снятия показаний) отсутствует. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
||||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Так вот ее и нужно получить. Из двух исходных. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: нет Всего: 13 |
Оптимизация этого запроса во многом зависит не столько от синтаксиса, сколько от физического окружения, то есть возможностей сервера. Какая БД и есть ли какие-то средства оптимизации запросов, например как Query Optimizer в Oracle? Там бы я использовал хэш-соединения, например.
-------------------- It's better to burn out than to fade away. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
Sqlninja, слу, если ты понял структуру хранимых данных - обьясни и мне, пожалуйста. А то я никак не пойму, как мы две абсолютно не связанные таблицы будем вместе смешивать
![]() |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Стурктуру изменить невозможно - таблицы пишутся недоступным для коррекции софтом.
Данные ложатся в БД формата MS Access.
Таблицы объединены единой осью времени. То есть события, отмечаемые в таблицах, происходят хотя и асинхронно, но параллельно. Вот их и надо совместить. Представь себе что это ОДНА таблица следующей структуры:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: нет Всего: 13 |
Таблицы связываются по CatID. Для одинаковых CatID вычисляется разница во времени.
Я так понял, что построить запрос Вы и сами сможете. То есть проблема в количестве записей? Тогда, если Ваш софт недоступен для коррекции, напишите свою утилитку, которая будет раз в час, например, делать INSERT в нужную Вам таблицу SELECT из Ваших 2х таблиц. Будет запоминаться штамп времени последнего такого "экспорта". Если Вам нужны данные за прошлые периоды - ну что же, пусть этот запрос выполнится один раз очень долго, день или сколько там нужно времени. -------------------- It's better to burn out than to fade away. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Все не так. Запускается эксперимент. С него накапливаются выходные данные в БД указанной структуры. Сразу по окончании эксперимента должна пойти обработка, которая должна сравнительно быстро (10-15 минут) дать результаты первичной обработки. В общем, похоже, никто пока не может предложить решения в рамках SQL. Я его тоже найти пока не могу. Значит, будем обрабатывать программно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
Если, как я понял, будет промежуточная таблица с отфильтрованным набором данных, то может разумней провести все вычисления прям на серваке (а не посети) в хранимых процедурах, например. А уже к полученной таблице строить дальнейший запрос для обработки данных уже с клиента -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Cashey
Собственно, именно это и сделано. Просто хотелось остаться в рамках SQL и не строгать процедур. Не вышло - ну да и хрен бы с ею... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |