Anzahl Datensätze
-
Ähm, ich glaube nicht, dass das linear steigt. Ich weiß es ehrlich gesagt nicht.
Teste es doch mal.
Du brauchst aber wirklich große Datenmengen um da was rauszufinden.Aber sowas kann man ja mal eben mit einer Schleife produzieren.
(Mein Programm für genau DEN Versuch ist leider weg...)
-
Also meine Zeit schwnakt wirklich stark, da ich zum Teil ja Daten aus dem Cache hole und zum Teil Daten von der Platte bekomme. Dazu kommt bei mir noch ob grad getestet wird, und wie das Netzwerk belastet ist. Diese Performance abfrage ist auch nur zum aufspüren von richtigen Server oder Netzwerk hängern. Also momentan schwanke ich bei 100 Datensätzen so zwischen 10 ms und 200 ms.
Jetzt soll nur geschaut werden, wenn ich jetzt plötzlich 500ms oder gar 1000ms hab für 100 Datensätze, dann weiß ich dass da wohl was faul ist. Jetzt versuch ich mal 10 mal 10 Datensätze einzulesen und den Mittelwert daraus zu bilden. den Rechne ich dann auf die Anzahl Datensätze hoch.
-
kann ich irgendwie sagen gib mir die ersten matching 10 Datensätze? Falsch gefragt. Wie bekomme ich die ersten 10 Datensätze? weil dann kann ich per Zufallszahl in irgendeine ID einsteigen und von dort aus 10 Datensätze holen, um nicht immer die gleichen zu bekommen. Dass die wahrscheinlichkeit der Verteilung zwischen Cache und Platte möglichst groß ist.
-
AH vergesst das ganze mit der Zeit!!
Die Zeit vor und nach Requery zu machen sagt nicht, dass ich solange brauche um alle Datensätze zu laden. Er sendet nur die Query etc und die DB sagt in der Zeit OK die Daten sind da. die Zeit bekomm ich aber nur wirklich raus wenn ich über meine ganzen Datensätze laufe die in meinem Recset sind. dann kann ich was darüber aussagen.
Beispiel ich lade 10 Datensätze in meiner Query Dauer: = 170ms
ich lade 8000 Datensätze in meiner Query Dauer: = 110 ms
-
Ist ja klar. Die Daten werden noch nicht abgerufen. Es wird nur ein Resultset erstellt.
Willst du die Daten gleich abrufen musst du einen Snapshot erstellen.
-
Öhm ich arbeite mit nem Snapshot!
m_nDefaultType = snapshot;
Aber ist eh egal, entweder ich lass es ganz sein oder ich mach einfach mal nen Filter der 100 Datensätze enthält und dann moveLast, dann läuft er auch über alle Daten. wobei das leider nicht linear verläuft.
100 Datensätze ≈ 200ms (bei meinem Netz usw.)
1000 Datensätze ≈ 5800msKlingt komisch ist aber so.
-
Ist doch klar..
mach doch einfach mal in deiner Commando-Zeile den Test, wenn du einfach nur nen "select * from tabelle" machst, dann isser sofort da - er liest die Daten dann wie sie physikalisch abgelegt wurden.
bringst du nun noch ne where Klausel mit rein braucht er länger zum reagieren. Diese Zeit bekommst du zurück, oder? Und am längsten braucht er wenn du ihn noch sortieren lässt, dann ist auch egal ob du es auf die ersten 100 zeilen beschränkst..
-
Polofreak schrieb:
Öhm ich arbeite mit nem Snapshot!
m_nDefaultType = snapshot;
Zumindest im Code sehe ich
Set.Open(CRecordset::dynaset | CRecordset::forwardOnly, strSQL);
ein dynaset
-
OK vielleicht einfach der vollständigkeit halber. Ich habe einen offenen Recset will den nicht schließen weil die Daten gerade angezeigt bleiben sollen, in der Zeit mach ich aber nen Count. Dazu stelle ich noch ne connection zur DB her drum hab ich einmal ein dynaset und einmal einen Snapshot. Die Zeiterfassung läuft momentan auf dem Snapshot.
Eigentlich jetzt wo du es sagst, schwachsinn was ich da mach, ich könnte das auch gleich in die Abfrage die ich stelle mit rein bauen. Naja egal.
Kann mir bitte einer sagen wie ich die ersten 1000 Datesätze einer Suchabfrage bekomme?
-
LIMIT 1000
IMHO bringt dies aber bei Access nichts.
-
werd es Probieren, DB ist ja auch MS SQL und nicht ACCESS
Danke
-
In Access gibt es ein "top 100" oder so.. weiss ich grad nicht mehr ausm Kopf, vielleicht geht das beim MS-SQL-Server ja auch
bei oracle kannst du sagen:
select * from tabelle where rownum <= 100
vielleicht geht ja sowas in der Art, kenn MS-SQL-Server ned
-
also hab mal nach euren Schlüsselwörtern gesucht und muss sagen TOP. Nicht nur eure Schlüsselwörter die ihr mir vorgeschlagen habt, sondern auch das gesuchte ist TOP.
Ich kann sagen TOP 1000 oder sogar top 10% oder soDANKE
//EDIT: TOP 10 PERCENT muss es heißen