Hallo!

> > Ich tendiere auch zu count(nID, nName, ...) eber nicht 
> > count(*) weil das wiederum schneller ist. Der 
> > Datenbanktreiber muss nicht vorher abfragen welche Felder 
> > vorhanden sind. 
> 
> Count(*) ist schneller, da es nur die zeilen z�hlt.
> Count(feld) �berpr�ft jeweils das feld ob es NULL ist oder 
> nicht und z�hlt
> nur die zeilen, bei dem das feld nicht null ist...

F�r COUNT(*) wird gerade mal ein Wert aus den Tabelleneigenschaften gelesen.
Schneller geht's nimmer.

Und bei meinem SQL Server gibt es auch bei mehr als 1 Millionen Datens�tzen
keine Abfrage, f�r die die Datenbank l�nger als 1 Sekunde braucht. Wenn ich
allerdings 100.000 Datens�tze aus der Datenbank in ein ADO-RecordSet oder
eine ADO.NET-DataTable �bertrage braucht die Datenbank daf�r bis zu 20
Sekunden. Die meiste Zeit bei einer Abfrage geht also fast immer f�r die
Aufbereitung der Daten drauf.

Ein Grund mehr, nur so viele Daten wie ben�tigt zu selektieren. Wenn man
also die Anzahl der Datens�tze mit 

SELECT COUNT(*) FROM tabelle

bestimmt hat und unbedingt die Zufallszahl ausserhalb der Datenbank
festlegen m�chte, kann man mit

SELECT   TOP 1 *
FROM     (SELECT   TOP [Zufallszahl] *
          FROM     tabelle
          ORDER BY id ASC)
ORDER BY id DESC

den gew�nschten Datensatz - und nur den - aus der Datenbank lesen. Selbst
das zweimalige "Sortieren"/Lesen des Prim�rschl�ssels d�rfte schneller sein
als das Lesen/�bertragen von 100 Datens�tzen.

Freundliche Gr��e
Joachim van de Bruck

_______________________________________________
Database.asp mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/database.asp

Antwort per Email an