![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация запроса [Firebird 2.0]
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 неагрегатных поля?