Subject Can this VIEW's be optimized?
Author Juergen Bachsteffel
Hi!

An external programmer team developed a application for a company I consult
now.
They needed some new features and the programmers added two new VIEWs to
the database.
Now the application tooks very long (30-60 sec) for startup, because the
VIEWS are used in the main window.

The developer database they used, holds half of the data of the production
database. With their database the views are fast.
They claim that the views cannot be optimized anymore and the optimation of
Interbase is not so good.
The company should change to MS-SQLSERVER. I am not convinced, because the
VIEWS look very complicated for me and are also nested.
I am no SQL-Expert, but ....


Environment:
Server IB4.2 (Windows)
Clients: Delphi5 (using BDE)
( I know that BDE was not the best choice, but it was before my time)

I tested it by my own with a Firebird 0.9.4-Server. The VIEWS are also very
slow with the real production data.)

I can extract also the whole data/metadata (Tables etc.) of the database if
needed.


Hope someone can help!

Thanks, in advance!

CU Juergen


/* View: V_ARTIKELBESTAENDE_EX */
CREATE VIEW V_ARTIKELBESTAENDE_EX (
ID,
ARTIKELNUMMER,
BESCHREIBUNG,
TYP,
TYP_ID,
KOSTEN,
EINHEIT,
LAGERBESTAND,
MINDESTBESTAND,
HOECHSTBESTAND,
KRITISCHERBESTAND,
DISPOBESTAND,
DISPOLAGERBESTAND,
LOSGROESSE_TEILE,
LOSGROESSE_KAUFTEILE,
ZEICHNUNGSNUMMER)
AS SELECT
Artikel.ID,
Artikel.ArtikelNummer,
Artikel.Beschreibung,
ArtikelTypen.Name,
Artikel.Typ_ID,
Artikel.Kosten,
ArtikelEinheiten.Kurzbezeichnung,
Gesamtbestaende.Lagerbestand,
Gesamtbestaende.Mindestbestand,
Gesamtbestaende.Hoechstbestand,
Gesamtbestaende.Kritischerbestand,
Gesamtbestaende.Dispobestand,
Gesamtbestaende.Dispolagerbestand,
Teile.Losgroesse,
Kaufteile.Losgroesse,
ZNR.Zeichnungsnummer
FROM
Artikel LEFT JOIN V_SUB_JC_ZEICHNUNGSNR ZNR ON Artikel.ID = ZNR.Artikel_ID
LEFT JOIN Kaufteile ON Artikel.ID = Kaufteile.ID
LEFT JOIN Teile On Artikel.ID = Teile.ID
LEFT JOIN ArtikelTypen ON Artikel.Typ_ID = ArtikelTypen.ID
LEFT JOIN ArtikelEinheiten ON Artikel.Einheit_ID = ArtikelEinheiten.ID
LEFT JOIN Gesamtbestaende ON Artikel.ID = Gesamtbestaende.Artikel_ID;



/* View: V_ARTIKELBESTAENDE_EX2 */
CREATE VIEW V_ARTIKELBESTAENDE_EX2 (
ID,
ARTIKELNUMMER,
BESCHREIBUNG,
TYP,
TYP_ID,
KOSTEN,
EINHEIT,
LAGERBESTAND,
MINDESTBESTAND,
HOECHSTBESTAND,
KRITISCHERBESTAND,
DISPOBESTAND,
DISPOLAGERBESTAND,
LOSGROESSE_TEILE,
LOSGROESSE_KAUFTEILE,
ZEICHNUNGSNUMMER)
AS SELECT
Artikel.ID,
Artikel.ArtikelNummer,
Artikel.Beschreibung,
ArtikelTypen.Name,
Artikel.Typ_ID,
Artikel.Kosten,
ArtikelEinheiten.Kurzbezeichnung,
Gesamtbestaende.Lagerbestand,
Gesamtbestaende.Mindestbestand,
Gesamtbestaende.Hoechstbestand,
Gesamtbestaende.Kritischerbestand,
Gesamtbestaende.Dispobestand,
Gesamtbestaende.Dispolagerbestand,
Teile.Losgroesse,
Kaufteile.Losgroesse,
ZNR.Zeichnungsnummer
FROM
Artikel LEFT JOIN V_SUB_JC_ZEICHNUNGSNR ZNR ON Artikel.ID = ZNR.Artikel_ID
LEFT JOIN Kaufteile ON Artikel.ID = Kaufteile.ID
LEFT JOIN Teile On Artikel.ID = Teile.ID AND Teile.NEUAUFLAGE = 1
LEFT JOIN ArtikelTypen ON Artikel.Typ_ID = ArtikelTypen.ID
LEFT JOIN ArtikelEinheiten ON Artikel.Einheit_ID = ArtikelEinheiten.ID
LEFT JOIN Gesamtbestaende ON Artikel.ID = Gesamtbestaende.Artikel_ID;



CREATE VIEW V_SUB_JC_ZEICHNUNGSNR (
ARTIKEL_ID,
ZEICHNUNGSNUMMER)
AS SELECT
ArtikelArtikelZusatzInfos.Artikel_ID,
Zeichnungen.Zeichnungsnummer

FROM

ArtikelArtikelZusatzInfos,
Zeichnungen

WHERE
ArtikelArtikelZusatzInfos.ArtikelZusatzInfo_ID = Zeichnungen.ID;