Anzahl Datensätze



  • 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 ≈ 5800ms

    Klingt 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 so

    DANKE
    //EDIT: TOP 10 PERCENT muss es heißen


Anmelden zum Antworten