AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DB Tabelle beschleunigen

Ein Thema von Ykcim · begonnen am 12. Jul 2019 · letzter Beitrag vom 18. Jul 2019
Antwort Antwort
Seite 1 von 3  1 23   
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#1

DB Tabelle beschleunigen

  Alt 12. Jul 2019, 13:43
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Hallo Zusammen,

ich habe eine Tabelle mit Auftragsdaten, in der ich historische Daten speichere. In dieser Tabelle sind über 2,5 Mio Datensätze. AUs diesem Grund sind die Abfragen sehr langsam (1,6-2,1 sek). Ich habe keine Idee, ob / wie ich die Tabelle schneller bekomme.
So ist die Tabelle aufgebaut:
Delphi-Quellcode:
CREATE TABLE `nedcom`.`as400archiev` (
  `WAAUNR` varchar(20) NOT NULL COMMENT 'FA-Nr',
  `WAAUPO` varchar(20) NOT NULL COMMENT 'FA-Zusatz',
  `WATENR` varchar(13) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL COMMENT 'Artikel-Nr',
  `TEBEZ1` varchar(26) NOT NULL COMMENT 'Artikelbezeichnung 1',
  `TEBEZ2` varchar(26) NOT NULL COMMENT 'Artikelbezeichnung 2',
  `WAFEMG` int(11) DEFAULT NULL COMMENT 'FA-Sollmenge',
  `WAGFMG` int(10) unsigned zerofill DEFAULT NULL COMMENT 'FA-Istmenge',
  `WAWEDA` int(11) DEFAULT NULL COMMENT 'FA-Wareneingangsmenge',
  `WASTAT` int(10) unsigned DEFAULT NULL COMMENT 'FA-Status',
  `OAAGNR` int(11) NOT NULL COMMENT 'AG-Nr',
  `OAAGBZ` char(30) DEFAULT NULL COMMENT 'AG-Bezeichnung',
  `OARMMG` int(11) DEFAULT NULL COMMENT 'AG-Istmenge',
  `OARMDA` date DEFAULT '0000-00-00' COMMENT 'AG-Rückmeldedatum',
  `OATLKZ` varchar(1) DEFAULT NULL COMMENT 'AG-Rückmeldung',
  `OAMANR` varchar(8) DEFAULT NULL COMMENT 'Arbeitsplatz',
  `MAMABZ` varchar(26) DEFAULT NULL COMMENT 'Arbeitsplatzbezeichnung',
  `TGDATE` varchar(10) DEFAULT NULL COMMENT 'Tagesdatum - 6Tage',
  `OASTTE` int(11) DEFAULT NULL COMMENT 'AG-Datum',
  `lgzgda` datetime DEFAULT '0000-00-00 00:00:00' COMMENT 'Lagerzugangsdatum',
  `kritfa` double DEFAULT '0' COMMENT 'Kritischer Auftrag',
  `thslda` date DEFAULT '0000-00-00' COMMENT 'Theoretisches Soll-Datum Rückwärtsberechnung',
  `aglfzt` varchar(20) DEFAULT '00:00:00' COMMENT 'Laufzeit des AG''s',
  `WASIBS` int(11) DEFAULT '0' COMMENT 'Sicherheitsbestand',
  `WAGEWI` double DEFAULT '0' COMMENT 'Gewicht Netto',
  `WAGWMB` varchar(5) DEFAULT '0' COMMENT 'Gewichtsbasis',
  `WATLKZ` varchar(2) DEFAULT '0' COMMENT 'Auftragskennzeichnung',
  `WARSMG` int(11) DEFAULT '0' COMMENT 'Restmenge',
  `OAUEZT` double DEFAULT NULL,
  `OAMAZT` double DEFAULT NULL,
  `TETART` varchar(45) DEFAULT NULL,
  `TETEFA` varchar(45) DEFAULT NULL,
  `TEPRKA` varchar(45) DEFAULT NULL,
  `OARUZT` double DEFAULT NULL,
  `OASTZT` double NOT NULL,
  `ZBASIS` varchar(5) NOT NULL COMMENT 'Kennzeichen, wie die Dauer mit der Stückzeit und der Menge berechnet werden muss',
  `RestDauer` varchar(20) NOT NULL DEFAULT '00:00:00' COMMENT 'Wie lange der FA von diesem AG noch benötigt, bis FA fertig',
  `EPress` date NOT NULL DEFAULT '0000-00-00' COMMENT 'Einpressterminierung',
  `EPressProz` double NOT NULL DEFAULT '0' COMMENT 'Wieviel Prozent der benötigten AGDauer ist noch verfügbar',
  `SollMenge` int(11) DEFAULT '0' COMMENT 'Geplante Soll-Menge des AG''s',
  `plan_date` date DEFAULT NULL COMMENT 'Für wann ist der FA geplant (korreliert mit dem Datum Start aus EilFa)',
  `frozen` varchar(5) DEFAULT '0' COMMENT 'Ist der Auftrag in dem eingefrorenenen Bereich',
  `sequence` int(10) unsigned DEFAULT '999' COMMENT 'Reihenfolgeposition',
  `rfehler` varchar(5) DEFAULT '0' COMMENT 'Rückmeldefehler in der AS400 ',
  `mchange` varchar(5) DEFAULT '0' COMMENT 'Maschine anders als in AS400 ',
  `emuster` varchar(5) DEFAULT '0' COMMENT 'Ist ein Erstmusterauftrag ',
  `draht` varchar(5) DEFAULT '0' COMMENT 'Ist Draht verfügbar. Ja,Nein ',
  `werkz` varchar(5) DEFAULT '0' COMMENT 'Ist Werkzeug verfügbar. Ja,Nein ',
  `scheiben` varchar(5) DEFAULT '0' COMMENT 'Sind Scheiben verfügbar. Ja,Nein ',
  PRIMARY KEY (`WAAUNR`,`WAAUPO`,`OAAGNR`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
Hat jemand eine Idee?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 13:51
Moin,
Tabelle schön und gut, aber:
- welche Abfragen sind langsam?
- und Welche Indices sind auf der Tabelle?

Im einfachsten Fall sollte ein Index auf das Feld helfen, das in Where-Klauseln steht. Je nach Fall kann es aber schnell sehr viel komplexer werden.

Geändert von jfheins (12. Jul 2019 um 13:56 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#3

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:00
Auch Partitioning könnte hier zusätzlich zum Index helfen, aber auch dazu benötigt man die Information wie auf diese Tabelle im Allgemeinen zugegriffen wird und wo man primär Performance braucht.

Wenn es allgemein um Performance geht, dann ist es ganz einfach (aber auch teuer):

Neue schnelle Hardware mit ganz viel schnellem RAM (die gesamte DB sollte da rein passen + X) und ganz viel schnellen Platten (SSD)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:01
Wer auch immer für die ersten 2/3 der Spaltennamen verantwortlich ist, gehört sehr fest an den Marterpfahl gezurrt!


Das nur so am Rande. Ohne die Abfragen genau zu sehen, kann man dir leider nicht wirklich helfen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:03
Also ich bin Keys etc nicht sehr vertraut...

Ich habe einen Primary gesetzt, der aber aus 3 Spalten besteht (waaunr, waaupo, oaagnr). Aber außer das ich den in der Tabelle gesetzt habe, mache ich sonst nichts damit...
Die Query ist fast egal, denn auch eine ganz einfache dauert sehr lange (1,7 sek).

Delphi-Quellcode:
SELECT * FROM as400archiev
where waaunr=291482
Was die Hardware betrifft, so liegt der Server auf eine Virtualisierung und hat einiges an Power....

Vielen Dank
Patrick

Zitat:
Wer auch immer für die ersten 2/3 der Spaltennamen verantwortlich ist, gehört sehr fest an den Marterpfahl gezurrt!
Die kommen aus XPPS... WAAUNR=WarenauftragsNr, WAAUPO=Warenauftragsposition, WATENR=WarenauftragsTeileNr...
Patrick

Geändert von Ykcim (12. Jul 2019 um 14:05 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:16
Dein Query auf waaunr sollte hier eigentlich den Primary Key verwenden und in diesem Fall ein schnelles Resultat bringen. Was für eine DB nutzt du? Gibt es da eine Art Execution Plan den du anschauhen kannst? Dort würdest du sehen, ob für das abgesetzte SQL ein Index verwendet wird oder nicht. Wieviele Records liefert dir dein Besipiel SQL?

Wenn du nicht recht weisst wie man einen Index nutzt, solltest du dich unbeding erst mal zu diesem Thema auseinandersetzen. Das ist das A und O bei der DB Entwicklung.

Geändert von Rolf Frei (12. Jul 2019 um 14:18 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:19
Ich benutze einen MySQL Server 5

Kannst Du mir ein Beispiel aufschreiben, wie ich den Primary in mein SQL-Statement einbauen muss?

Danke
Patrick
Patrick
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:22
Ich bin mir grad nicht 100% sicher, aber ist der primary key so in dieser Form nicht ein kombinierter Schlüssel, und bringt auch wirklich nur etwas, wenn man über alle 3 Felder filtert? Man könnte testhalbar mal einen Index über die Spalte WAAUNR erzeugen, und dann schauen ob die konkrete Abfrage hier dann schneller ist.

Das ist übrigens auch, warum die ganz konkreten Abfragen wichtig sind: Man muss immer spezifisch für die optimieren, die man tatsächlich auch einsetzt. Allgemeine Maßnahmen gibt es, von Hardware abgesehen, praktisch kaum.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:27
Zitat:
Das ist übrigens auch, warum die ganz konkreten Abfragen wichtig sind: Man muss immer spezifisch für die optimieren, die man tatsächlich auch einsetzt. Allgemeine Maßnahmen gibt es, von Hardware abgesehen, praktisch kaum.
Ich weiß, wenn ich eine Frage mit einer Abfrage habe, dann stelle ich die auch online. Aber hier ist nicht die Abfrage das Problem, sondern der Umgang mit den vielen Datensätzen.

Zitat:
Man könnte testhalbar mal einen Index über die Spalte WAAUNR
Die WAAUNR Spalte ist nicht unique. Die Werte wiederholen sich hier. Geht das dann trotzdem?

Vielen Dank
Patrick

EDIT: Ich habe einen Index auf WAAUNR gelegt - keine Veränderung...
Patrick

Geändert von Ykcim (12. Jul 2019 um 14:29 Uhr)
  Mit Zitat antworten Zitat
hoika

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

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 14:42
Hallo,
nehmen wir mal eine andere Abfrage

SELECT TEBEZ1 FROM as400archiev
where waaunr=291482


1. Wie schnell ist die?

2. Und was passiert, wenn du die Query 2mal hintereinander ausführst?

3. Was läuft noch auf dem Datenbank-Server, vielleicht ein Domain-Controller?
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

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 13:51 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