AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Vorhandensein eines Records prüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Vorhandensein eines Records prüfen

Ein Thema von hoika · begonnen am 13. Jul 2017 · letzter Beitrag vom 14. Jul 2017
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Vorhandensein eines Records prüfen

  Alt 13. Jul 2017, 10:57
Hallo,
select distinct 1 from mytable where myid is not null ganz klar schneller als
Das liefert doch aber zurück, ob es überhaupt einen Eintrag in der Tabelle gibt.

Ich denke, dass First schneller als Distinct ist.
Das Distinct muss ja erst die Ergebnismenge ermitteln, um dann darauf Distinct auszuführen.

Bei der SELECT RDB$RELATIONS.RDB$RELATION_NAME Abfrage stellt sich für mich die Frage,
was passiert, wenn der letzte Eintrag meiner Ergebnismenge (where myid=X) gelöscht wird.
Ist die Statistik dann trotzdem korrekt, zeigt also keine Einträge an,
oder wird der gelöscht Eintrag immer nicht berücksichtigt?.

Any record that has had its primary key modified will appear twice if the old version has not been garbage collected and deleted records will continue in the count until they are garbage collected.
Das sieht hier eben so aus, als ob auch die Garbage-Einträge mit gezählt werden.
Heiko

Geändert von hoika (13. Jul 2017 um 10:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Vorhandensein eines Records prüfen

  Alt 13. Jul 2017, 15:21
Hallo,
select distinct 1 from mytable where myid is not null ganz klar schneller als
Das liefert doch aber zurück, ob es überhaupt einen Eintrag in der Tabelle gibt.
das wolltest du doch? oder hab ich da was mißverstanden?

Wenn Du aus einem (Delphi) Programm heraus diese Frage stellst, reicht es ja auch nur den ersten Datensatz abzuholen, und den evtl vorhandenen Rest vergißt Du einfach??

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Vorhandensein eines Records prüfen

  Alt 13. Jul 2017, 18:32
Hallo,
es geht darum, festzustellen,
ob es mindestens einen Record einer bestimmten Where-Klausel gibt.

Select First 1 From RechnungsId From RechnungsPosition Where RechnungsId=1
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von RP12Biker
RP12Biker

Registriert seit: 19. Feb 2007
Ort: In der Lüneburger Heide
165 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Vorhandensein eines Records prüfen

  Alt 13. Jul 2017, 19:10
Sorry, aber ich habe die Frage wie p80286 offensichtlich ebenfalls falsch verstanden. Dafür kannst Du den Hack vergessen, der ist nur um zu prüfen, ob überhaupt ein Datensatz in der Tabelle vorhanden ist.

Und wie Du schon selbst korrekt ergänzt hast, funktioniert das nur für Tabellen ohne gelöschte Datensätze zuverlässig. Damit es nach Löschung wieder funktioniert ist ein Backup mit "Garbage collection" (gbak -g) und anschliessendes Restore notwendig.
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.553 Beiträge
 
Delphi 12 Athens
 
#5

AW: Vorhandensein eines Records prüfen

  Alt 13. Jul 2017, 19:27
Zitat:
Backup, Restore, ....
Sollte ein Check/Optimize/Analyze/Rpair/... nicht die freien Stellen der gelöschten Records entfernen und die Statistik aktualisieren?



SELECT FIRST muß doch eventuell auch die Sortierung beachten? (wenn die DB daher auch noch erst sortiert, muß erstmal alles gesucht werden)
Mit DISTINCT wird es dann noch schlimmer.
Und bei COUNT muß sowieso alles erstmal gesucht werden.

1 oder true statt * im SELECT dürfte auch etwas sparen, wenn nicht alle Felder der gefundenen/verwendeten Records geladen werden brauchen.
(falls das DBMS nicht schon schlau genug ist und mitbekommt, dass es am Ende eh keines der Felder braucht und sie somit weg lässt)

EXSIST sollte da doch eventuell besser laufen, da dort alles egal ist
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Jul 2017 um 19:32 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Vorhandensein eines Records prüfen

  Alt 14. Jul 2017, 07:17
Hallo,
SELECT FIRST muß doch eventuell auch die Sortierung beachten?

Eventuell, wenn ich ein Order By machen würde,
aber für das einfache Erkennen des Vorhandenseins mindestens eines Records ist das ja nicht notwendig.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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