Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Am schnellsten die letzten 100 Datensätze aus ner DB laden? (https://www.delphipraxis.net/183407-am-schnellsten-die-letzten-100-datensaetze-aus-ner-db-laden.html)

AlexII 7. Jan 2015 15:15

Datenbank: SQLite • Version: 3 • Zugriff über: SQLite3Connection

Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Hallo,

ich möchte aus einer DB am schnellsten die letzten 100 Datensätze holen. Ich kam auf diese Lösung, gibt's bessere Ideen?

Delphi-Quellcode:
SELECT knr FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 100
Wird da nicht erst sortiert? Das kann doch unter Umständen lange dauern, oder?

DeddyH 7. Jan 2015 15:28

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Definiere "die letzten 100".

baumina 7. Jan 2015 15:28

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Wenn id_teilnehmer indiziert ist, muss er nicht sortieren, sondern geht über den Index. Dann müsste das so recht schnell gehen.

AlexII 7. Jan 2015 15:31

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von baumina (Beitrag 1285804)
Wenn id_teilnehmer indiziert ist, muss er nicht sortieren, sondern geht über den Index. Dann müsste das so recht schnell gehen.

id_teilnehmer ist der PK, dieser wird automatisch indiziert, oder?

mkinzler 7. Jan 2015 15:34

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Ja. Bei einem PK wir automatisch ein Index angelegt

tsteinmaurer 7. Jan 2015 15:38

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Ob dann dieser automatisch erstelle Index für einen PL bei einem DESC verwendet werden kann ist DBMS-spezifisch.

pertzschc 7. Jan 2015 16:14

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Ist das hier ein Doppelpost von hier?
Hast Du die Lösung dort bereits verstanden und umgesetzt?

Viele Grüße,
Christoph

AlexII 7. Jan 2015 16:17

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von pertzschc (Beitrag 1285810)
Ist das hier ein Doppelpost von hier?
Hast Du die Lösung dort bereits verstanden und umgesetzt?

Viele Grüße,
Christoph

Nein das ist kein Doppelpost!

mkinzler 7. Jan 2015 16:22

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Das könnte man schon als recht ähnlich ansehen ( die letzten x mit x= 1 vs x = 100)

AlexII 7. Jan 2015 18:16

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von mkinzler (Beitrag 1285813)
Das könnte man schon als recht ähnlich ansehen ( die letzten x mit x= 1 vs x = 100)

Das schon, aber ich suchte nach einer besseren Lösung.

p80286 7. Jan 2015 22:40

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von AlexII (Beitrag 1285817)

Das schon, aber ich suchte nach einer besseren Lösung.

Und was gefällt Dir daran nicht?

Gruß
K-H

danielmagin 8. Jan 2015 11:29

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von AlexII (Beitrag 1285800)
Hallo,

ich möchte aus einer DB am schnellsten die letzten 100 Datensätze holen. Ich kam auf diese Lösung, gibt's bessere Ideen?

Delphi-Quellcode:
SELECT knr FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 100
Wird da nicht erst sortiert? Das kann doch unter Umständen lange dauern, oder?

also bei fast allen DB's ist der PK immer ein Aufsteigender Index (ASC)

somit erstelle dir ein INDEX auf das PK Feld als DESC index, somit muss er nicht natural laufen

dann klappt deine Anfrage immer sehr schnell.

AlexII 8. Jan 2015 11:37

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
[QUOTE=danielmagin;1285879]
Zitat:

Zitat von AlexII (Beitrag 1285800)
Hallo,

ich möchte aus einer DB am schnellsten die letzten 100 Datensätze holen. Ich kam auf diese Lösung, gibt's bessere Ideen?

Delphi-Quellcode:
SELECT knr FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 100
somit erstelle dir ein INDEX auf das PK Feld als DESC index, somit muss er nicht natural laufen

Ok... und wie mache ich das?

mkinzler 8. Jan 2015 11:39

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Indem Du einen Index auf id_teilnehmer mit absteigender Sortierung erstellst. Geht einfach im Admintool oder mit SQL Create INDEX ...

AlexII 8. Jan 2015 11:57

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von mkinzler (Beitrag 1285883)
Indem Du einen Index auf id_teilnehmer mit absteigender Sortierung erstellst. Geht einfach im Admintool oder mit SQL Create INDEX ...

Das heiß, dass in meiner Abfrage erst absteigend sortiert wird und nicht vorher?

Delphi-Quellcode:
SELECT knr FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 100

DeddyH 8. Jan 2015 12:07

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Wie, "vorher"?

AlexII 8. Jan 2015 12:15

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von DeddyH (Beitrag 1285887)
Wie, "vorher"?

Ich meine muss ich vorher (nach Programmstart) meine IDs mit DESC sortieren und danach

Delphi-Quellcode:
SELECT knr FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 100
aufrufen? Damit die Werte vor der Abfrage schon DESC sortiert sind, oder ich lasse meine select Abfrage so wie sie jetzt ist und fertig?

mkinzler 8. Jan 2015 12:17

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Wenn du aufsteigend sortierest, witrd der ASC INDEX verwendet und wenn du absteigend sortierst der DESC INDEX, falls vorhanden, sonst wird ein full table scan gemacht -> langsam.

DeddyH 8. Jan 2015 12:21

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Die Daten in der Tabelle liegen in irgendeiner undefinierten Reihenfolge vor, sortiert werden kann also nur bei der Abfrage. Und danach ändert sich die Reihenfolge innerhalb der Tabelle auch nicht, wäre ja auch völliger Blödsinn, da wäre der Server ja beinahe nur noch mit Sortieren beschäftigt. Aus diesem Grund musst Du die Sortierung in Deinem Statement angeben, es gibt also kein "vorher".

[edit] Nachtrag: Und dafür gib es ja die Indizes, die sind sortiert und werden auch ggf. aktualisiert, wenn sich Daten ändern. [/edit]

AlexII 8. Jan 2015 12:23

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von DeddyH (Beitrag 1285894)
Die Daten in der Tabelle liegen in irgendeiner undefinierten Reihenfolge vor, sortiert werden kann also nur bei der Abfrage. Und danach ändert sich die Reihenfolge innerhalb der Tabelle auch nicht, wäre ja auch völliger Blödsinn, da wäre der Server ja beinahe nur noch mit Sortieren beschäftigt. Aus diesem Grund musst Du die Sortierung in Deinem Statement angeben, es gibt also kein "vorher".

Aber der PK wird doch von der DB immer automatisch indexiert wurde hier gesagt... jetzt verstehe ich nix mehr. :roteyes:

DeddyH 8. Jan 2015 12:24

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Siehe mein Edit.

mkinzler 8. Jan 2015 12:27

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Ja, es wird ein aufsteigender INDEX erzeugt, den der wird normalerweise verwendet. Willst Du eine abweichende Sortierung ( also absteigend) musst Du selber für einen passenden INDEX sorgen.

AlexII 8. Jan 2015 12:29

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von mkinzler (Beitrag 1285898)
Ja, es wird ein aufsteigender INDEX erzeugt, den der wird normalerweise verwendet. Willst Du eine abweichende Sortierung ( also absteigend) musst Du selber für einen passenden INDEX sorgen.

Und wenn ich dafür nicht sorge, kann meine select-Abfrage bei sehr vielen Datensätzen ewig dauern?

mkinzler 8. Jan 2015 12:31

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Ja, den wenn kein INDEX vorhanden ist macht er einen full table scan, d.h. er sucht direkt in der Tabelle, in der die Datensätze unsortiert in der Reihenfolge des Einfügens geschrieben sind.

AlexII 8. Jan 2015 13:10

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von mkinzler (Beitrag 1285900)
Ja, den wenn kein INDEX vorhanden ist macht er einen full table scan, d.h. er sucht direkt in der Tabelle, in der die Datensätze unsortiert in der Reihenfolge des Einfügens geschrieben sind.

Hm... schade, aber gut, man muss damit leben.

vagtler 8. Jan 2015 13:11

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von AlexII (Beitrag 1285908)
[...] Hm... schade, aber gut, man muss damit leben.

Nein, muss man nicht (s.o.).

mkinzler 8. Jan 2015 13:17

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Den man kann einfach einen weiteren Index anlegen

AlexII 8. Jan 2015 13:50

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Zitat:

Zitat von mkinzler (Beitrag 1285910)
Den man kann einfach einen weiteren Index anlegen

Ein Attribut mit zwei Indexen?

Dejan Vu 8. Jan 2015 13:52

AW: Am schnellsten die letzten 100 Datensätze aus ner DB laden?
 
Yo, und?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz