AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Dataset.Next | sehr langsam

Dataset.Next | sehr langsam

Ein Thema von Dekras12 · begonnen am 22. Jan 2019 · letzter Beitrag vom 23. Jan 2019
Antwort Antwort
Seite 2 von 4     12 34   
Dekras12

Registriert seit: 22. Jan 2019
11 Beiträge
 
#11

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 12:45
Ich habe es mir auch gedacht, aber das hat nicht geholfen.
Ich habe es mit rxdbgrid2.DataSource.DataSet.DisableControls deaktiviert. War etwas besser, aber nicht gut genug.
Früher hat es auch geklapt, aber das Programm wurde auf das neue Delphi konvertiert, wie ich es verstanden habe
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#12

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 12:45
Ich würde auch per SQL die Ordnung aller betroffenen Datensätze (die größer (gleich) der Insert-Stelle) sind erhöhen. Dann den neuen Satz einfügen und dann ein refresh der Query.
Ralph
  Mit Zitat antworten Zitat
Dekras12

Registriert seit: 22. Jan 2019
11 Beiträge
 
#13

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 12:50
@Jumpy Ich probiere es mal aus
@mkinzler Was ist ein adäquater Index?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#14

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 12:55
Gibt es einen Index auf die Spalte AufNr oder zumindest einen, der diese Spalte an erster Stelle enthält?

Ansonsten muss die Datenbank beim Scrollen per Fulltablescan jeweils den nächsten Satz, der die Bedingung erfüllt, suchen und das kann dauern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 12:57
Zitat:
@mkinzler Was ist ein adäquater Index?
Am Besten einen über diese beide Spalten.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

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

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 13:04
Hallo,#
zumindestens das normale DBGrid war zwar sehr clever, wenn es sich im DBase/Paradox handelte,
aber bei Interbase/Firebird nicht ganz so.
Indizes waren extrem wichtig und zwar Indizes in beiden Richtungen
(Create Asc Index, Create Desc Index).
Das Asc kannst du auch weglassen.

Ansätze
1. Nimm eine leere Datenbank bzw. eine mit wenigen Datensätzen.
Ist das dort schnell, musst Du dir die SQL-Befehle ansehen,
die das DBGrid so wegschickt (DB-Monitor benutzen).

2. Bau doch mal testweise das gleiche mit einem TStringGrid oder einem normalen RXGrid nach
(dann natürlich nur mit Queries).
Heiko
  Mit Zitat antworten Zitat
hoika

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

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 13:12
Hallo,
Delphi-Quellcode:
daten.pos.First;
         while not daten.pos.eof do begin
Was konkret machst du hier?
Kann es sein, dass die date.pos deine 400K Tabelle ist und du versuchst,
das Feld Ordnung so zu setzen, dass der neue Tabelleneintrag zwischen 2 anderen liegt?

geg:
Record2000, Ordnung-2000
Record2001, Ordnung-2001

Ziel
Record2000, Ordnung-2000
Record_neu, Ordnung-2001
Record2001, Ordnung-2002
Heiko
  Mit Zitat antworten Zitat
Dekras12

Registriert seit: 22. Jan 2019
11 Beiträge
 
#18

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 13:17
@hoika Ja du hast es richtig verstanden.


[Edit] Es ist gut möglich, das die keinen Index haben. Ich kenne mich noch nicht mit Index aus, aber ich werde mich erstmal durchlesen. Vielen vilen Dank erstmal für die Hilfe und Vorschläge.

[Edit2] Jetzt verstehe ich das mit den Index, aufnr hatte schon bereits einen Index (Descending).

Geändert von Dekras12 (22. Jan 2019 um 13:55 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 13:42
Diese Updates würde ich auch per SQL durchführen:

update <Tabelle> set ordnung = ordnung +1 where ordnung > = :id;
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

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

AW: Dataset.Next | sehr langsam

  Alt 22. Jan 2019, 13:48
Hallo,
siehe mkinzler.
Id ist in meinem Beispiel Record2001, Ordnung-2001

Zuerst das Update, dann das Insert.
Probleme sind aber im Mehrbenutzerbetrieb zu erwarten.

Wenn kein Index angelegt ist, wird es für die DB bitter.
-> 100 mal Full Table Scan (wegen dem DBGrid), und das bei 400K Datensätzen.

Ein (Asc) Index beschleunigt das Suchen erheblich,
verlangsamt aber Insert/Update/Delete.
In der Regel kann man das aber vernachlässigen.

Wenn du ein Order By benutzt, wäre ein (Asc) Index auch schön.
Entscheidend ist aber der Index auf die Artikelnummer.

Create Index idx_TabName_FeldName On TabellenName(FeldName)
idx_TabName_FeldName ist ein Vorschlag, z.B. idx_Artikel_ArtNr
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:09 Uhr.
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