Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация запроса [Firebird 2.0]


Страницы:   1 2

zorik ©   (2008-06-18 14:43:00) 

Помогите оптимизировать View. Суть такова. Есть 2 основные таблицы + справочники. Отношение один ко многим. В реальности в 80-90% случаев получается отношение один к одному, в остальных - 10-20% - одной записи MEZWELLO соответствуют 2-5 записей MEZO

Структура таблици MEZWELLO

CREATE TABLE MEZWELLO (
 ID_MEZWELLO   INTEGER NOT NULL,
 DATE_MEZWELLO TIMESTAMP NOT NULL,
 ID_WELL       INTEGER NOT NULL
);

ALTER TABLE MEZWELLO ADD CONSTRAINT
PK_MEZWELLO
PRIMARY KEY (ID_MEZWELLO);

ALTER TABLE MEZWELLO ADD CONSTRAINT
FK_MEZWELLO_WELL
FOREIGN KEY (ID_WELL) REFERENCES WELL (ID_WELL);


Структура таблици MEZO

CREATE TABLE MEZO (
 ID_MEZO      INTEGER NOT NULL,
 ID_WELL      INTEGER NOT NULL,
 QO_M         DOUBLE PRECISION DEFAULT 0 NOT NULL,
 ID_MEZWELLO  INTEGER
);

ALTER TABLE MEZO ADD CONSTRAINT
PK_MEZO
PRIMARY KEY (ID_MEZO);

ALTER TABLE MEZO ADD CONSTRAINT
FK_MEZO_WELL
FOREIGN KEY (ID_WELL) REFERENCES WELL (ID_WELL);


Структура View

CREATE VIEW EXP_LIST_WELL_W (
 NAME_WELL,
 ZDATE,
 QO_M,
)
AS
select
 well.name_well,
 mezwello.date_mezwello zdate,
 sum(mezo.qo_m) qo_m,
from mezwello
left join mezwello on (mezwello.id_mezwello = mezo.id_mezwello)
left join well on (mezwello.id_well = well.id_well)
group by
 mezwello.date_mezwello,
 mezwello.id_well,
 mezo.id_mezwello,
 well.name_well,
 well.id_well,
 well.sortname_well,
order by
 mezwello.date_mezwello,
 well.sortname_well


Правильный-Вася   (2008-06-18 15:54:00) [21]

не вижу метаданных WELL, используемой во вьюхе


zorik   (2008-06-18 15:54:00) [22]

Ругается без єтого. Мне при переходе на Firebird 2.0 много запросов пришлось переписать. В 1.5 наверно прошло бы


Sergey13   (2008-06-18 15:49:00) [23]

> [2] zorik ©   (18.06.08 15:18)

> изменил
а это зачем?
> group by
> mezwello.date_mezwello,
> well.name_well,
> well.sortname_well
если в результате останется только

> select
> well.name_well,
> mezwello.date_mezwello zdate,
> sum(mezo.qo_m) qo_m

> хотелось бы еще быстрее.

На сколько конкретно? Сколько сейчас? Каков объем таблиц? Что за "функцию из UDF"?


zorik   (2008-06-18 15:18:00) [24]

изменил

CREATE VIEW EXP_LIST_WELL_W2 (
 NAME_WELL,
 ZDATE,
 QO_M
)
AS
select
well.name_well,
mezwello.date_mezwello zdate,
sum(mezo.qo_m) qo_m
from mezwello
inner join mezo on (mezwello.id_mezwello = mezo.id_mezwello)
inner join well on (mezwello.id_well = well.id_well)
group by
mezwello.date_mezwello,
well.name_well,
well.sortname_well
order by
mezwello.date_mezwello,
well.sortname_well


хотелось бы еще быстрее. На самом деле там 10 сум и поле sortname_well вычислительное и использует функцию из UDF


Sergey13   (2008-06-18 15:04:00) [25]

А зачем группировать по 6-и полям, если во вьюхе всего 2 неагрегатных поля?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо