PDA

Vollständige Version anzeigen : Performance


C. Palmetshofer
07.11.2002, 12:16
Hallo Leute,
ich habe personaldaten (pers-nummer, name, geb-dat, etc.) und
zeitabhängige personaldaten (lohn, kostenstellenzuordnung, arbeitszeitmodell, etc.)

Zeitabhängige daten werden mit pers-nummer einer person zugeordnet und haben ein gültig-ab-datum, primary key ist (pers-nummer + datum).

Um die zu einem bestimmten tag gültigen daten zu selektieren verwende ich folgende abfrage
(kalender ist eine tabelle mit nur einem feld datum und enthält für jeden kalendetag einen datensatz):

select c.datum, a.persnr, .... b.lohn, .......
from pers as a, pers_za as b, kalender as c
where b.persnr = a.persnr
and b.datum = (select max(datum) from pers_za as d
where persnr = a.persnr
and datum <= c.datum)

Mit dieser abfrage kann ich für jeden tag und jede person die jeweils gültigen daten ermitteln,
die performance lässt allerdings zu wünschen übrig.
Besonders abfragen wie 'welche mitarbeiter waren im monat x aktiv?' sind problematisch,
da access scheinbar alle Kombinationen berechnet und dann erst die where-klausel anwendet.

select distinct persnr, .... from [abfrage]
where datum>= [monatserster] und datum <= [monatsletzter])


Derzeit habe ich ca. 140 personalstammsätze und ca. 3.800 zeitabhängige datensätze.

Hat vielleicht jemand eine idee wie man das besser machen kann?

Acc2k

<XChris>
20.11.2002, 07:03
Ich weiss nicht genau wie das MS SQL Server macht ... aber hast Du einen Index auf die entsprechenden Suchkriterien gelegt? Wenn diese gecacht sind, geht alles schneller ;-). Wesentlich.

Chris