AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MySQL Tabelle flotter machen
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Tabelle flotter machen

Ein Thema von Medium · begonnen am 13. Jan 2012 · letzter Beitrag vom 19. Jan 2012
 
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#1

MySQL Tabelle flotter machen

  Alt 13. Jan 2012, 13:06
Datenbank: MySQL • Version: 4.1.9 • Zugriff über: UniDAC
Mahlzeit zusammen. Wir haben bei einem Kunden Drucker an Waagen gegen ein DB-Log getauscht, dass statt auf Papier die Ausgaben der Waagen protokolliert. Das landet alles in einer Tabelle, die mit einem kleinen Tool gefiltert und gedruckt werden kann. Mittlerweile sind dort so ca. 150k Datensätze aufgelaufen, und - nicht ganz unerwartet - wird das ganze langsamer. Leider stärker als erhofft, so dass ich jetzt nach Mitteln suche, meine Tabelle und Abfragen "aufzupeppen".

Die Tabelle:
Code:
CREATE TABLE `log` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `machinenr` int(10) unsigned NOT NULL default '0',
  `printerdate` datetime NOT NULL default '0000-00-00 00:00:00',
  `packagenr` int(10) unsigned NOT NULL default '0',
  `charge` int(10) unsigned NOT NULL default '0',
  `prodname` varchar(255) NOT NULL default '',
  `prodnr` varchar(10) NOT NULL default '',
  `weight` decimal(10,2) NOT NULL default '0.00',
  `rating` char(2) NOT NULL default '',
  `deviation` decimal(10,2) NOT NULL default '0.00',
  PRIMARY KEY (`id`))
  ENGINE=InnoDB
  DEFAULT CHARSET=latin1;
Die Selects dazu sehen alle in etwa so aus:
Code:
SELECT * FROM log
WHERE (printerdate BETWEEN :dts AND :dte)
ORDER BY printerdate, packagenr
Wobei es vier wählbare Sortierungen gibt, und es kann nach einzelnen Werten in "machinenr", "prodname", "prodnr" und "rating" gefiltert werden (entsprechende Anfügung (vorne) von "AND (field=:valueparam)" an den WHERE-Teil).

Die möglichen Sortierungen sind:
1) ORDER BY printerdate, packagenr
2) ORDER BY charge, packagenr, printerdate
3) ORDER BY prodname, printerdate, packagenr
4) ORDER BY prodnr, printerdate, packagenr

Erwarteterweise ist 3) mit Abstand das langsamte, doch auch die anderen sind zuweilen mit 5-10 Sekunden einfach zu lange unterwegs. Mit ist klar, dass die Tabelle alles andere als gut Indexiert ist, allerdings haben meine Versuche mit diversen Indizes auch nicht so viel verbessert - ich steck da einfach nicht tief genug drin.
Leider muss das große Textfeld "prodname" mitgeschlörrt werden, und um ein "SELECT *" komme ich auch nicht herum, da alle Felder in einem Grid angezeigt werden.

Daher meine Frage an die DB-Experten hier: Gibt es zumindest schon mal irgend etwas offensichtliches, womit sich der arme Log-Ausdruck-Mitarbeiter etwas entnerven ließe?

Dankschö schon mal!
"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
 


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 22:16 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 by Thomas Breitkreuz