Писал небольшой проект для планового отдела и выбрал INTERBASE думал
сделаю простенькую базу и буда клепать отчеты.
Все было хорошо пока не стал делать сложные запросы (не особо но)
представление типа (или такой запрос не важно)
CREATE VIEW V_CONTRACT(CODE,NAME,...) AS SELECT C.CODE, C.NAME, ...
FROM EXECUTORS_LIST EL
INNER JOIN EXECUTORS E ON (EL.CODE_EL = E.CODE_EL)
RIGHT OUTER JOIN PHASE P ON (E.CODE = P.CODE) AND (E.CODE_P =
P.CODE_P)
RIGHT OUTER JOIN CONTRACT C ON (P.CODE = C.CODE)
INNER JOIN CUSTOMERS CS ON (C.CUSTOMER = CS.CODE_CS)
INNER JOIN TYPE_CUSTOMERS TC ON (CS.CODE_TC = TC.CODE_TC)
;
это бы очень помогло строить отчеты.
В самых главных табличках не более 200 записей, в справочниках до 10
Результат запроса 300 записей!!! К этому обзору нужно часто обращаться
Interbase 5.5 УМИРАЕТ на ~3 мин (CEL 400/256 ram/ NT40WS)!!!
препробовл все индексы, оптимизацию плана ... не знаю что делать,
приходиться писать 12 этажные закросы на каждый конкретный случай
Сконвертировал в ORACLE8 на убитом сервере (Pentium 200, 64 ram,
NT40WS) все выполняется
МГНОВЕННО!!!!!!!!!!!!!!
А проект уже написан ЧТО ДЕЛАТЬ, подскажите может я глючу
--
Best regards
Мои (несуразные) мысли.
1 Не напрягай IB запросами такого рода. Из своего опыта — гораздо эффективнее переписать все это том же VBA. Было время, когда это привело к увеличению скорости обсчета на 2 порядка.
2 Обратись на специализированную конференцию по Interbase — news://forums.demo.ru/epsylon.public.interbase
E>А проект уже написан ЧТО ДЕЛАТЬ, подскажите может я глючу
Веревка есть? А так, добро пожаловать в общество самого прогрессивного и не требовательного к ресурсам и мозгам администраторов SQL сервера
PS. Тут тривиальное пересечение по трем таблицам (но на 600MB базе) приводит его в ступор, а ты VIEW от SP считаешь тривиальным
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте Earl, Вы писали:
E>Писал небольшой проект для планового отдела и выбрал INTERBASE думал E>сделаю простенькую базу и буда клепать отчеты. E>Все было хорошо пока не стал делать сложные запросы (не особо но) E>представление типа (или такой запрос не важно) E>CREATE VIEW V_CONTRACT(CODE,NAME,...) AS SELECT C.CODE, C.NAME, ... E>FROM EXECUTORS_LIST EL E> INNER JOIN EXECUTORS E ON (EL.CODE_EL = E.CODE_EL) E> RIGHT OUTER JOIN PHASE P ON (E.CODE = P.CODE) AND (E.CODE_P = E>P.CODE_P) E> RIGHT OUTER JOIN CONTRACT C ON (P.CODE = C.CODE) E> INNER JOIN CUSTOMERS CS ON (C.CUSTOMER = CS.CODE_CS) E> INNER JOIN TYPE_CUSTOMERS TC ON (CS.CODE_TC = TC.CODE_TC) E> ; E>это бы очень помогло строить отчеты. E>В самых главных табличках не более 200 записей, в справочниках до 10 E>Результат запроса 300 записей!!! К этому обзору нужно часто обращаться E>Interbase 5.5 УМИРАЕТ на ~3 мин (CEL 400/256 ram/ NT40WS)!!! E>препробовл все индексы, оптимизацию плана ... не знаю что делать, E>приходиться писать 12 этажные закросы на каждый конкретный случай
E>Сконвертировал в ORACLE8 на убитом сервере (Pentium 200, 64 ram, E>NT40WS) все выполняется E>МГНОВЕННО!!!!!!!!!!!!!!
E>А проект уже написан ЧТО ДЕЛАТЬ, подскажите может я глючу E>-- E>Best regards
А индексы у Вас по тем полям, по которым идет JOIN, построены?
Сие есть просто страшный глюк.
В стародавние времена я тоже с этим столкнулся разочек, и именно на IB 5.5. Дня два пытался понять в чём дело, а на третий, решив что проекту кирдык и денежек мне уже не видать, пошёл и напился в хлам. Явившись же домой в 4 утра, пьянющий, сел за комп и случайно попробовал использовать для объединения таблиц не JOIN-, а WHERE-синтаксис. И всё заработало со свистом. Вот такая вот история...
З.Ы. Писалось всё это дело на Delphi 5, и потом мне говорили что в каком-то из Update Pack к Delphi сей глюк был исправлен, но проект уже был сдан, деньги получены и проверять я это не стал.
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Re: Не выдержало сердце, помогите
От:
Аноним
Дата:
14.02.02 05:05
Оценка:
Здравствуйте Earl, Вы писали:
E>Писал небольшой проект для планового отдела и выбрал INTERBASE думал E>сделаю простенькую базу и буда клепать отчеты. E>Все было хорошо пока не стал делать сложные запросы (не особо но) E>представление типа (или такой запрос не важно) E>CREATE VIEW V_CONTRACT(CODE,NAME,...) AS SELECT C.CODE, C.NAME, ... E>FROM EXECUTORS_LIST EL E> INNER JOIN EXECUTORS E ON (EL.CODE_EL = E.CODE_EL) E> RIGHT OUTER JOIN PHASE P ON (E.CODE = P.CODE) AND (E.CODE_P = E>P.CODE_P) E> RIGHT OUTER JOIN CONTRACT C ON (P.CODE = C.CODE) E> INNER JOIN CUSTOMERS CS ON (C.CUSTOMER = CS.CODE_CS) E> INNER JOIN TYPE_CUSTOMERS TC ON (CS.CODE_TC = TC.CODE_TC) E> ; E>это бы очень помогло строить отчеты. E>В самых главных табличках не более 200 записей, в справочниках до 10 E>Результат запроса 300 записей!!! К этому обзору нужно часто обращаться E>Interbase 5.5 УМИРАЕТ на ~3 мин (CEL 400/256 ram/ NT40WS)!!! E>препробовл все индексы, оптимизацию плана ... не знаю что делать, E>приходиться писать 12 этажные закросы на каждый конкретный случай
E>Сконвертировал в ORACLE8 на убитом сервере (Pentium 200, 64 ram, E>NT40WS) все выполняется E>МГНОВЕННО!!!!!!!!!!!!!!
E>А проект уже написан ЧТО ДЕЛАТЬ, подскажите может я глючу E>-- E>Best regards
Interbase не любит такие вещи как right outer join, избавься от них — должно заработать.