Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на обобщение данных / 11 сообщений из 11, страница 1 из 1
21.08.2003, 12:06
    #32242969
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
Имеем ;)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create table  "Insurant" 
(
     "CentId"         smallint not null,
     "InstId"         smallint not null,
     "NodeId"         smallint not null,
     "PersonId"       integer not null,
     "NameN"          varchar( 100 ),
     "PersonType"     integer not null,
    constraint  "pkInsurance"  primary key ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" )
);

create table  "JuridPerson" 
(
     "CentId"         smallint not null,
     "InstId"         smallint not null,
     "NodeId"         smallint not null,
     "PersonId"       integer not null,
     "ChiefPostN"     varchar( 40 ),
    constraint  "pkJuridPerson"  primary key( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ),
    constraint  "fkJuridPerson"  foreign key ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ) references  "Insurant" ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" )
);

create table  "NaturPerson" 
(
     "CentId"     smallint not null,
     "InstId"     smallint not null,
     "NodeId"     smallint not null,
     "PersonId"   integer not null,
     "PasspNo"    varchar( 20 ),
  constraint  "pkNaturPerson"  primary key( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ),
  constraint  "fkNaturPerson"  foreign key ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ) references  "Insurant" ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" )
);

необходимо реализовать самый простенький запрос: "Вся инфа по всем Insurant'ам".
Кроме как
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select *
from  "Insurant"  i left outer join
( "NaturPerson"  n full join  "JuridPerson"  j
on (n. "CentId" =j. "CentId" ) and
    (n. "InstId" =j. "InstId" ) and
    (n. "NodeId" =j. "NodeId" ) and
    (n. "PersonId" =j. "PersonId" )
)
on (
      (i. "CentId" =j. "CentId" ) and
      (i. "InstId" =j. "InstId" ) and
      (i. "NodeId" =j. "NodeId" ) and
      (i. "PersonId" =j. "PersonId" )
    )
or (
      (i. "CentId" =n. "CentId" ) and
      (i. "InstId" =n. "InstId" ) and
      (i. "NodeId" =n. "NodeId" ) and
      (i. "PersonId" =n. "PersonId" )
   )
order by i. "CentId" ,i. "InstId" ,i. "NodeId" ,i. "PersonId" 

ничего лучшего не получилось :(
Может это можно более-менее человечей забалабенить? Опять же вся ета беда на натуральных планах:
Код: plaintext
1.
PLAN SORT (JOIN (I NATURAL,JOIN (J NATURAL,N NATURAL)))

Представляю сколько он начнет отрабатывать на надцати тысячах записей Ж8-/
...
Рейтинг: 0 / 0
25.08.2003, 16:09
    #32246487
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
А может у тебя "натуральный" план из-за сортировки? Если нет - значит неправильно индексы построены, если да - тогда так и должно быть.
...
Рейтинг: 0 / 0
25.08.2003, 16:43
    #32246573
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
Я думаю из-за логического условия или т.е. or .
OR редко когда быстро бывает.
...
Рейтинг: 0 / 0
27.08.2003, 12:37
    #32248769
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
ет точно .... стоит поставить OR и 90% вероятность получения натурального плана :(
...
Рейтинг: 0 / 0
27.08.2003, 13:04
    #32248821
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
Мо тогда есть идеи как перестроить сам сиквел?
...
Рейтинг: 0 / 0
27.08.2003, 13:15
    #32248836
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
без изменения структуры таблиц никак
...
Рейтинг: 0 / 0
27.08.2003, 13:17
    #32248840
VictorKr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
Всегда стремись к простоте. У тебя 2 одинаковые по сотаву таблицы. Сделай одну и добаь поле тип персоны. Будет гораздо прощее.
...
Рейтинг: 0 / 0
27.08.2003, 13:22
    #32248846
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
у него три таблицы :)
подумай, может одна действительно лучше будет :)
...
Рейтинг: 0 / 0
27.08.2003, 13:41
    #32248879
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
Гы... Дык весь прЫкол-то в том, что была одна. Эт недавно растрояйцили ее Ж8-/
Мо действительно: Лучшее - враг хорошего?... А как же тогда буквари, нормальные формы и пр. капиталистический заговор?
...
Рейтинг: 0 / 0
27.08.2003, 13:43
    #32248883
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
тебе скорость важнее или НФ? ты уж определись :)
а зачем разделили-то?
...
Рейтинг: 0 / 0
27.08.2003, 14:41
    #32248961
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обобщение данных
Да я привел тока ж ключевые поля, так сказать, для примеру... А ваще их там...
Просто в одной таблице info о ф/л, а в другой по ю/л. А важна, конечно, скорость. Но и БД не на последнем месте. При куче незаюзанных полей - пухнет, как на дрожжах. Ну и куча других ньюансов...
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на обобщение данных / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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