none
Ein Problem mit Performance in einer Abfrage

    Frage

  • Hallo Feunde

    Ich hab ne Abfrage, die bissel kompliziert aussieht. Sie besteht aus ein DISTINCT und ein Paar LEFT JOINS. Diese Abfrage benötigt 10 Sekunden, um c.a 3800 Datensätze zurückzugeben.

    Das ist meine Abfrage:

    SELECT DISTINCT tb_KonzeptDaten.DFCC, tb_KonzeptDaten.OBD_Code AS Konzept_Obd,

    tb_bauteile.*, FehlerCodes_akt_Liste.VAG_Code, FehlerCodes_akt_Liste.OBD_Code,

    FehlerCodes_akt_Liste.F_Klasse_EU, FehlerCodes_akt_Liste.F_Klasse_US,

    FehlerCodes_akt_Liste.CDT AS CdtNr,FehlerCodes_akt_Liste.Pfad_Bezeichnung,

    FehlerCodes_akt_Liste.Fehlerpfad AS PfadName, FehlerCodes_akt_Liste.Fehlerunterpfad,

    tb_bauteile_Tools.Tool AS Tool_ FROM ((tb_bauteile LEFT JOIN FehlerCodes_akt_Liste ON tb_bauteile.OBD2_Plaus=FehlerCodes_akt_Liste.ID) L

    EFT JOIN tb_bauteile_Tools ON tb_bauteile.Tool=tb_bauteile_Tools.ID)

    LEFT JOIN tb_KonzeptDaten ON FehlerCodes_akt_Liste.Fehlerpfad=tb_KonzeptDaten.DFC;

    aber ohne die erste zwei Felder (tb_KonzeptDaten.DFCC, tb_KonzeptDaten.OBD_Code AS Konzept_Obd)  funktioniert die Abfrage sehr schnell

    Meine Frage:

    Warum ist das so (Ohne erste zwei Felder funktioniert sie schnell)?

    und

    Wie kann ich mein Performanceproblem überhaupt beheben?

    Habt ihr vllt. eine Idea?

    im folgende findet ihr showpalns:

    Showplan von der originalen Abfrage:

    --- temp query ---
    - Inputs to Query -
    Table 'tb_bauteile'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_be.mdb'
    Table 'FehlerCodes_akt_Liste'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_be.mdb'
        Using index 'PrimaryKey'
        Having Indexes:
        PrimaryKey 19786 entries, 34 pages, 19786 values
          which has 1 column, fixed, unique, clustered and/or counter, primary-key, no-nulls
        OBD_Code 19786 entries, 49 pages, 2985 values
          which has 1 column, fixed
        IDneu 19786 entries, 34 pages, 19786 values
          which has 1 column, fixed, clustered and/or counter
        Fehlerunterpfad 19786 entries, 30 pages, 177 values
          which has 1 column, fixed
        Fehlerpfad 19786 entries, 105 pages, 14922 values
          which has 1 column, fixed
        F_Klasse_US 19786 entries, 24 pages, 35 values
          which has 1 column, fixed
        CDT 19786 entries, 35 pages, 15836 values
          which has 1 column, fixed
    Table 'tb_bauteile_Tools'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_be.mdb'
    Table 'tb_KonzeptDaten'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_Fktn_Daten_be.mdb'
    - End inputs to Query -
    01) Outer Join table 'tb_bauteile' to table 'FehlerCodes_akt_Liste'
          using index 'FehlerCodes_akt_Liste!PrimaryKey'
          join expression "tb_bauteile.OBD2_Plaus=FehlerCodes_akt_Liste.ID"
    02) Sort table 'tb_bauteile_Tools'
    03) Outer Join result of '01)' to result of '02)'
          using temporary index
          join expression "tb_bauteile.Tool=tb_bauteile_Tools.ID"
    04) Sort table 'tb_KonzeptDaten'
    05) Outer Join result of '03)' to result of '04)'
          using temporary index
          join expression "FehlerCodes_akt_Liste.Fehlerpfad=tb_KonzeptDaten.DFC"

    und ohne erste zwei felder sieht der Showplan so aus:

    -- temp query ---
    - Inputs to Query -
    Table 'tb_bauteile'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_be.mdb'
    Table 'FehlerCodes_akt_Liste'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_be.mdb'
        Using index 'PrimaryKey'
        Having Indexes:
        PrimaryKey 19786 entries, 34 pages, 19786 values
          which has 1 column, fixed, unique, clustered and/or counter, primary-key, no-nulls
        OBD_Code 19786 entries, 49 pages, 2985 values
          which has 1 column, fixed
        IDneu 19786 entries, 34 pages, 19786 values
          which has 1 column, fixed, clustered and/or counter
        Fehlerunterpfad 19786 entries, 30 pages, 177 values
          which has 1 column, fixed
        Fehlerpfad 19786 entries, 105 pages, 14922 values
          which has 1 column, fixed
        F_Klasse_US 19786 entries, 24 pages, 35 values
          which has 1 column, fixed
        CDT 19786 entries, 35 pages, 15836 values
          which has 1 column, fixed
    Table 'tb_bauteile_Tools'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_be.mdb'
    Table 'tb_KonzeptDaten'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_Fktn_Daten_be.mdb'
        Using index 'DFC'
        Having Indexes:
        DFC 35307 entries, 134 pages, 3705 values
          which has 1 column, fixed
    - End inputs to Query -
    01) Outer Join table 'tb_bauteile' to table 'FehlerCodes_akt_Liste'
          using index 'FehlerCodes_akt_Liste!PrimaryKey'
          join expression "tb_bauteile.OBD2_Plaus=FehlerCodes_akt_Liste.ID"
    02) Sort table 'tb_bauteile_Tools'
    03) Outer Join result of '01)' to result of '02)'
          using temporary index
          join expression "tb_bauteile.Tool=tb_bauteile_Tools.ID"
    04) Outer Join result of '03)' to table 'tb_KonzeptDaten'
          using index 'tb_KonzeptDaten!DFC'
          join expression "FehlerCodes_akt_Liste.Fehlerpfad=tb_KonzeptDaten.DFC"
          store result in temporary table

    Die felder sind auch indiziert
    Freitag, 24. August 2012 10:16

Antworten

  • Showplan von der originalen Abfrage:

    Table 'tb_KonzeptDaten'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_Fktn_Daten_be.mdb'
    - End inputs to Query -
    

    und ohne erste zwei felder sieht der Showplan so aus:

    Table 'tb_KonzeptDaten'
        Database 'P:\OBD-Datenbank\OBD-FZG-Verwaltung_TestDaten\OBD-FZG-Verwaltung_Fktn_Daten_be.mdb'
        Using index 'DFC'
        Having Indexes:
        DFC 35307 entries, 134 pages, 3705 values
          which has 1 column, fixed
    - End inputs to Query -

    Die felder sind auch indiziert

    Hallo,

    was mir adhoc auffällt ist, das in der zweiten Abfrage der Index DFC für tbl_Konzeptdaten verwendet wird, in der ersten nicht. Das solltest Du als erstes analysieren.


    Olaf Helper
    Blog Xing


    Freitag, 24. August 2012 15:54

Alle Antworten