![]() |
|
Модераторы: LSD |
![]()
|
|
| Гость_Гость |
|
||||||||
|
Unregistered |
БД - Oracle
1. есть таблицы
1. в первой перечислены субъекты РФ 2. во второй - некие сенсоры, которые имеют modeleType, moduleID (однозначно их идентифицирующие) и привязка к субъекту через subjectID 3. в третьей находятся пулы адресов для каждого сенсора (IP1, IP2) и привязка к субъекту через subjectID это 3 таблицы, которые описывают субъекты, сенсоры и пулы адресов есть таблица
в которую кладутся сообщения от сенсоров для определенного moduleType и moduleID, а также IP источника и время Нужно создать запросы 1. Выбрать за определенной период времени сообщения от все сенсоров для данного субъекта 2. Количество сообщений от сенсоров для каждого субъекта в отсортированном виде ну и в общем все в этом роде сложность в том, что все данные разнесены по разным таблицам и запрос получается очень сложным например - каждый сенсор может иметь несколько пулов адресов. значит для первого запроса:
Как правильно задать запрос ? Мой вариант такой - но он долго выполняется и како-то кривой
|
||||||||
|
|||||||||
| Beard |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.7.2005 Где: Санкт-Петербург Репутация: нет Всего: 9 |
Может стоит View создать для связи этих таблиц и оперировать с ним?
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Индексы по полям DATA.IP, SUB_SUBJECTS.IP1, SUB_SUBJECTS.IP2, DATA.DATE и SUB_SUBJECTS.subjectID созданны? (Их кстати по возможности лучше сделать уникальными)
SUB_SUBJECTS.IP1, SUB_SUBJECTS.IP2 - задают диапазон адресов? P.S. Никаких особых косяков в запросе я не вижу. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Guest |
|
||||||
|
Unregistered |
Да - это диапазон адресов
я не уверен, что
проверит принадлежность DATA.IP для всех пулов адресов для всех сенсоров для субъекта с индексом 0 |
||||||
|
|||||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Вполне возможно, если для условю SUB_SUBJECTS.subjectID = 0 соответсвует больше одной строки. А как диапазоны соотносятся между собой, они всегда образуют непрерывный диапазон или в нем могут быть дыры? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| Guest |
|
||||
|
Unregistered |
нет - строка одна
есть ли дыры или нет - это мне неважно. Проблемма в том, что диапозонов может быть несколько, поэтому проверит ли это условие принадлежность IP для всех существующих диапазонов ? (Да еще только для тех диапазонов, которые принадлежат субъекту=0?) |
||||
|
|||||
| Guest |
|
|||
|
Unregistered |
тоесть например
есть для субъекта 0 сенсор 1 для сенсора есть диапазоны 1..10 13..40 55..60 (это так, для примера) в DATA.IP = 5 так вот проверятся ли все 3 диапазона для субъекта = 0? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Да. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Спасибо LSD
А можно ли оптимизировать запрос - ну например объединение или еще что-нибудь, а то время запроса у Oracle для 2 миллионов строк составляет около 1 минуты (что-то слишком много |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Приведи полный скрипт по созданию таблиц (включая индексы). Собери по таблицам статистику и покажи план запроса.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| igon |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 3 Всего: 21 |
Если адресов не очень много, можно попробовать избавиться от BETWEEN для IP, создав и заполнив таблицу
Тогда запрос будет выглядеть так
P.S.: Чем, в контексте вопроса, может помочь таблица SENSORS? Она на запрос вроде никак не влияет.
Это сообщение отредактировал(а) igon - 13.7.2005, 22:15 -------------------- Хотите поговорить об этом? |
||||||
|
|||||||
| Guest |
|
||||||
|
Unregistered |
Таблицы
Данные
|
||||||
|
|||||||
| LSD |
|
||||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Я посмотрел следующий запрос:
Без индексов тут будет следующий план запроса:
т.е. полное сканирование таблиц. В принципе оно может быть эффективным, если идет выборка более 50 процентов данных, но это по моему не тот случай (особенно для DATA1). Если создать индексы
То план будет следующий
выборка идет уже не по всей таблице а по диапазону индекса. Посмотри так, что будет с запросом. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||||
|
|||||||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |