Announcement

Collapse
No announcement yet.

Performance bei MERGE Statement

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Performance bei MERGE Statement

    Hallo,

    ich habe hier zwei Tabellen in einer Oracle 10g Datenbank, die mit einem MERGE Statement täglich abgeglichen werden sollen. Aktuell hat die Zieltabelle ca. 70 Mio. Datensätze und die Quelltabelle 5 Mio. Datensätze. Die ON (Join) Klausel sieht wie folgt aus:

    [highlight=sql]
    ON (
    dst.date_year = src.date_year
    and dst.date_month = src.date_month
    and dst.date_day = src.date_day
    and dst.datalogger_id = src.datalogger_id
    and dst.device_id = src.device_id
    and dst.channel_name = src.channel_name
    )
    [/highlight]

    In beiden Tabellen existiert ein UNIQUE Constraint auf den Feldern der ON-Klausel. Das MERGE Statement weigert sich allerdings einen Index zu nehmen und zeigt laut Ausführungsplan einen FULL TABLE SCAN für beide Tabellen an. Für die Quell-Tabelle ist das ja ok, weil er eh alle durchgehen muss, aber für die 70 Mio. Zieltabelle hätte ich mir erwartet, dass er über einen Index geht.

    Für beide Tabellen wurden die Statistiken mit:

    [highlight=sql]
    analyze table xyz compute statistics
    [/highlight]

    neu berechnet. Ändert nichts am Ausführungsplan.

    Hat jemand eine Idee?
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

  • #2
    Hallo,

    hast Du mal hints gesetzt und geschaut, ob die Abfrage dadurch beschleunigt wird?

    BEGIN
    DBMS_STATS.GATHER_TABLE_STATS (
    OwnName => 'user'
    ,TabName => 'tabelle'
    ,Estimate_Percent => SYS.DBMS_STATS.AUTO_SAMPLE_SIZE
    ,Method_Opt => 'FOR ALL INDEXED COLUMNS SIZE AUTO'
    ,Cascade => TRUE);
    END;
    /

    Imho sollte man analyze TABLE seit 9i( oder war es 8?) nicht mehr nutzen, sondern z.B. o.a. Job.

    Hoffe, dass ich Dir etwas helfen konnte.

    Gruß

    Martin

    Comment

    Working...
    X