Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Query Optimierung

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.06.2009
    Beiträge
    12

    Query Optimierung

    Hallo ich habe eine Query gebastelt, die scheinbar eine sehr Hohe Laufzeitkomplexität besitzt.

    Es sind zwei Tabellen

    therapydata1(id,pid,diag1,diag2,diag3,diag4,diag5, diag6)
    therapycosts(id,diag,costs)


    Jetzt soll jeder Behandlung aus therapydata (also für jede id) die Kosten(aus Therapycosts) aufaddiert werden für jede Diagnose diag1 bis diag6 . Ungefähr so:


    Code:
    SELECT z.id, z.pid, sum(z.costs) AS Gesamtkosten, z.behandlungsdauer, z.versorgungsebene FROM
    (
    SELECT m.id, m.pid, t.diag, t.costs, m.behandlungsdauer, m.versorgungsebene
    FROM therapydata1 m Join mc_therapycosts t ON t.diag=m.diag1 or t.diag=m.diag2
    or t.diag=m.diag3 or t.diag=m.diag4 or t.diag=m.diag5 or t.diag=m.diag6
    )  z
    GROUP BY z.pid
    Wie gesagt dauert das Ewigkeiten. Außerdem muss ich sogar noch zwei weitere therapydatentabellen berücksichtigen ! Das will ich mit UNION ALL machen . Das wird aber dann auch nochmal lange dauern

  2. #2
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Hoi

    Was für eine Datenbank hast du denn am Laufen?

    Lg

    Christian
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    lass doch mal ein explain über deine query laufen und zeig uns die ausgabe,
    damit kannst du sehen wo der flaschenhals hängt.

    Vermutungen, spontane Ideen:

    index auf therapycosts(diag) ist erstellt?

    wenn diag ein PK in therapycosts ist und dein DBMS Daten nur aus nem Primärschlüssel entnehmen kann, könnte man vllt überlegen den PK auf therapycosts(diag,costs) zu legen.

    wenn diag kein PK in therapycosts ist und es sehr viele Zeilen mit demselben diag gibt und diese Tabelle sehr statisch ist (heißt selten geändert wird) könnte man überlegen Redundanz einzubauen und die Gesamtkosten pro diag schon vorzuberechnen so in der Art:

    Code:
    create table therapycosts_calc ( diag int unsigned primary key, costs int unsigned);
    insert into therapycosts_calc  ( diag, costs ) select diag, sum(costs) from therapycosts group by diag;
    und da kann man evtl auch bisschen geschwindigkeit (zu gunsten von speicherbedarf) rausholen wenn man den primary key von therapycosts_calc auf diag,costs setzt (gerht nur wenn das dbms auch die daten ausm pk holen kann, mysql innodb kannn das afaik)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •