Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FreePascal Die letzte Zeile aus der DB schnell auslesen? (https://www.delphipraxis.net/183382-die-letzte-zeile-aus-der-db-schnell-auslesen.html)

Dejan Vu 6. Jan 2015 14:38

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Obwohl die Idee mit dem 'ORDER BY DESC LIMIT' meistens echt brauchbar ist, würde ich mir bei großen Datenmengen 2x überlegen, ob ich diesen Weg gehen soll. Denn wider dem gesunden Menschenverstand (ist das grammatikalisch überhaupt korrekt :gruebel:?) scheinen einige RDBMS bei der Sortierung etwaige Indexe zu ignorieren (sofern es sich nicht um den Primär/Clustered Index handelt) und rödeln ewig und drei Tage rum, bis sie das letzte Element ausspucken. Andere verwenden einen Index, aber auch nur dann, wenn er auch absteigend sortiert ist.

Ein Aggregat, wie 'SELECT MAX(ID)' ist dagegen -mit Index- schnell genug.

Im Zweifelsfall würde ich die Kandidaten durchprobieren.

Bei kleinen Datenmengen ist das aber wurscht.

Zitat:

Zitat von DeddyH (Beitrag 1285610)
Wenn es zu dem Kunden bereits abhängige Daten gibt, wird das mit dem Löschen eh schwierig (bei entsprechender Datenstruktur).

Aber auch nur dann, wenn man Foreign Keys benutzt, also Schattenparker ist. :stupid:

himitsu 6. Jan 2015 15:08

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Um das einfach nochmal genauer aufzuzeigen

SQL-Code:
SELECT knr
FROM tbteilnehmer
ORDER BY id_teilnehmer DESC
LIMIT 1
bzw.
SQL-Code:
SELECT
  knr
FROM
  tbteilnehmer
ORDER BY
  id_teilnehmer DESC
LIMIT
  1
Da wird dann verständlicher was zusammengehört.
  • nimm alle Daten aus der Tabelle (da kein WHERE)
  • sortiere Dieses umgekehrt (DESC)
  • nimm nur das Letzte Erste (LIMIT 1) ...
Das Erste (SORT id_teilnehmer DESC) ist ja der Letzte (SORT id_teilnehmer ASC), vor der Umsortierung.

DeddyH 6. Jan 2015 15:09

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1285612)
Zitat:

Zitat von DeddyH (Beitrag 1285610)
Wenn es zu dem Kunden bereits abhängige Daten gibt, wird das mit dem Löschen eh schwierig (bei entsprechender Datenstruktur).

Aber auch nur dann, wenn man Foreign Keys benutzt, also Schattenparker ist. :stupid:

Jo, wer braucht schon referentielle Integrität? Das ist eh nur wieder so ein modisches Zeugs :stupid:

Bernhard Geyer 6. Jan 2015 15:17

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Zitat:

Zitat von DeddyH (Beitrag 1285617)
Zitat:

Zitat von Dejan Vu (Beitrag 1285612)
Zitat:

Zitat von DeddyH (Beitrag 1285610)
Wenn es zu dem Kunden bereits abhängige Daten gibt, wird das mit dem Löschen eh schwierig (bei entsprechender Datenstruktur).

Aber auch nur dann, wenn man Foreign Keys benutzt, also Schattenparker ist. :stupid:

Jo, wer braucht schon referentielle Integrität? Das ist eh nur wieder so ein modisches Zeugs :stupid:

Daten löschen? In diesem Bereich wäre es vom Datenmodell wohl sinnvoller eine Flag "inaktiv" zu vergeben statt alle Daten zu löschen.

DeddyH 6. Jan 2015 15:26

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Gelöschte Kunden kann aber kein Buchprüfer mehr kontrollieren :mrgreen:. Langsam wird es aber OT, oder?

Bernhard Geyer 6. Jan 2015 15:29

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Zitat:

Zitat von DeddyH (Beitrag 1285622)
Gelöschte Kunden kann aber kein Buchprüfer mehr kontrollieren :mrgreen:. Langsam wird es aber OT, oder?

Ich habe nicht damit angefangen :roll:

Aber ich denke es ist alles relevante gesagt.
Oder gibt’s noch Fragen Hauser - äh - AlexII?

AlexII 6. Jan 2015 16:14

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1285624)
Oder gibt’s noch Fragen Hauser - äh - AlexII?

Bin jetzt bei dieser Lösung geblieben:

Delphi-Quellcode:
SELECT knr FROM tbteilnehmer WHERE id_teilnehmer=(SELECT MAX(id_teilnehmer) FROM tbteilnehmer)


Aber wie vermeide ich, dass ein neuer Kunde die letzte gelöschte KNr bekommt?

DeddyH 6. Jan 2015 16:30

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Willst Du wirklich Kunden löschen können? Lies doch #24 noch einmal durch, das erscheint mir persönlich die vernünftigere Lösung zu sein.

Bernhard Geyer 6. Jan 2015 17:09

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Oder andersweitig die schon vergebenen Nummern merken.
Auch wenns hier nicht mehr geht. Für solche Unique-IDs verwenden wir bei uns GUIDs. Immer eindeutig und wenn es eh nur einer DB-System interne Nummer darstellt stört es nicht das sie nicht sprechend lesbar sind

mjustin 6. Jan 2015 17:18

AW: Die letzte Zeile aus der DB schnell auslesen?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1285618)
Daten löschen? In diesem Bereich wäre es vom Datenmodell wohl sinnvoller eine Flag "inaktiv" zu vergeben statt alle Daten zu löschen.

In diesem Bereich muss man eventuell auch das BDSG beachten und gegebenenfalls doch löschen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.
Seite 3 von 4     123 4      

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