Subject Re: [ib-support] Can this VIEW's be optimized?
Author Andreas Pohl
Jürgen,

obwohl Claudio bereits die Richtung vorgegeben hat, hier noch ein paar Gedanken:

- Views sind manchmal sehr problematisch, weil der interne Optimierer von Interbase fäufig verfügbare Indizes nicht benutzt.
- Ich würde für komplexe Abfragen immer Stored Procedures verwenden, weil sie viel besser optimiert werden können.
- Alternativ kann man auf der Applikationsseite ebenfalls optimieren, indem man anstatt der LEFT JOINS 1:1 Master-Detail-Beziehungen benutzt, d.h. ich habe eine einfache Abfrage (select * from Table ) und die anderen Daten werden erst dann abgerufen, wenn der Datensatzzeiger auf den entsprechenden Datensatz positioniert wird.

BTW, ich würde immer sehr misstrauisch sein, wenn mir eine Firma/Berater Besserung verspricht, indem man auf andere Pferde/Datenbanken setzt. Da müssen schon überzeugendere Argumente kommen als nur die Beschleunigung eines Views...

Mit freundlichem Gruss & Best Regards

Andreas Pohl
apohl@...
www.ibp-consult.com
----- Original Message -----
From: "Juergen Bachsteffel" <juergen@...>
To: <ib-support@yahoogroups.com>
Sent: Friday, December 14, 2001 2:24 PM
Subject: [ib-support] Can this VIEW's be optimized?


> 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;
>
>
>
>
>
> To unsubscribe from this group, send an email to:
> ib-support-unsubscribe@egroups.com
>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>
>