1.2k Aufrufe
Gefragt in Datenbanken von
Hallo zusammen

Ich habe gerade von einem Kunden der SQL Server 2008 R2 hat,
Daten bekommen die ich analysieren muss.

Nun habe ich ein Problem bei einer Abfrage die ich machen will.
Es geht um eine Tabelle "Test", welche knapp 6 Mio Records hat.
In dieser Tabelle sind Daten die nicht eindeutig sind.

Mein Statement welches bei sql2000 und sql 2005 ohne Probleme
lief, geht hier aber nun nicht mehr auf dem sql2008.

SELECT TOP 1 <eindatumsfeld> FROM test
WHERE test_person = 110
AND test_irgendwas = 0
ORDER BY <eindatumsfeld>

Es geht Darum das kleinste Datum zu erhalten welches in dieser
Tabelle ist und für die Person 110 zutrifft.

Wie gesagt, bei den "alten" SQL-Versionen geht das wunderbar,
aber nun läuft mein Statement leider endlos dahin...und es kommt
nie eine Antwort.

Lasse ich aber das Order by weg, dann bekomme ich das resultat
innert paar milisekunden.

Ich kann und will aber nicht 120'000 Record lesen vom server und
dann lokal nach datum sortieren. Erstens dauert das zu lange und
zweitens bläst es das Client-programm unnötig auf.

Hat jemand eine Idee weshalb das nicht mehr geht?

Set rowcount 1 geht auch nicht...bwz. hat den selben effekt dass das
statement endlos läuft


Vielen Dank für Tips
Dani

2 Antworten

0 Punkte
Beantwortet von
Hallo lieber Dani

Wie sich herausgestellt hat, ist beim import der SQL-Datensicherung
wohl einiges kaput gegangen bei den Indexen.
Nachdem ich Sie gelöscht und wieder neu aufgebaut hatte, läuft die
Abfrage wieder normal.

Gruss
Dani
0 Punkte
Beantwortet von worm2012 Einsteiger_in (25 Punkte)
Hallo Dani

Nun, du könntest dir auch das "order by" sparen:

SELECT min(<eindatumsfeld>) FROM test
WHERE test_person = 110
AND test_irgendwas = 0

Gruss Rolf
...