• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ladezeit zu lang?

hab die werte in den int felder angepasst und 3 Felder (JM, Bilanzkreis und Beschreibung) als index gesetzt.
Die Tabelle braucht zwar immer noch ein wenig um die datensätze einzulesen aber ich konnte so die Abfragezeit halbieren!
Hast du auch geprüft, was passiert, wenn du nicht alle varchar Felder indizierst?
Ein Index ist quasi eine Kopie der Daten, d.h. wenn du auf alle Felder einen Index setzen würdest, dann wäre der Index genauso gross wie die Tabelle. Und logischwerweise ist der Index umso schneller je kleiner er ist.

Aus deiner Beschreibung geht nicht hervor, welchen Zweck das Feld JM hat. Zumal du ja schon zwei Datumsfelder in der Tabelle hast (die aber dummerweise nicht als Datumfelder angelegt sind) und warum JM in "allen Feldern" existiert?

Ich finde es sehr seltsam, dass jemand mit deinen Kenntnissen mit einem anscheinend grossen Projekt befassen muss. Mein Einstieg für SQL war ein deutlich kleineres. Und dafür habe ich mir erstmal ein Buch gekauft (nicht empfehlenswert, aber als Grundlage hilfreich) und viel Online recherchiert. Ich vermute mal den Begriff Normalisierung hast du noch nicht gehört? Was aber ein Vorrausetzung ist um Datenbanktabellen zu entwickeln.
Und selbst trotz dieser umfangreichen Recherche, mußte ich im Laufe der Zeit feststellen, dass ich viele Dinge komplett falsch gemacht habe und die Tabellen immer wieder ummodeln, vor allem das richtige Indizieren ist ein Wissenschaft für sich.
 
Werbung:
Naja... hab erst gaaanz viel und eigetnlich alle daten die ich bearbeiten wollte in textdateien abgelegt und die denn immer abgerufen und so... und hab auch schon ein paar kleinere Projekte gemacht, die alle funktioniert haben.

Erst jetzt bei diesem relativ großen projekt, fällt mir auf, wie wenig ich doch weiß und somit versuch ich jetzt das fertig zu bekommen und mir dann wissen ranzuschaffen um nicht nochmal so einen Fehler zu machen.

Und was die Felder angeht, ich hab 3 Datumsfelder. 2 davon sind auch wie ein Datum aufgebaut also TT.MM.JJJJ. Das eine jedoch ist eine zuweisung, die ich beim Einlesen vergebe um die Daten einem Zeitraum zuordnen zu können. Da steht nur das Jahr und das Datum drin also JJJJMM.
Das ist nur vorhanden um die Datenbank später besser auslesen und zuordnen zu können.
 
Und was die Felder angeht, ich hab 3 Datumsfelder. 2 davon sind auch wie ein Datum aufgebaut also TT.MM.JJJJ. Das eine jedoch ist eine zuweisung, die ich beim Einlesen vergebe um die Daten einem Zeitraum zuordnen zu können. Da steht nur das Jahr und das Datum drin also JJJJMM.
Das ist nur vorhanden um die Datenbank später besser auslesen und zuordnen zu können.
Ich weiß nicht ob du schon darauf hingewiesen wurdest, aber in SQL gibt es Datumsfelder MySQL :: MySQL 5.1 Referenzhandbuch :: 11.3.1 Die DATETIME-, DATE- und TIMESTAMP-Typen und dazu eine Fülle von Datumsfunktionen MySQL :: MySQL 5.5 Reference Manual :: 11.7 Date and Time Functions. Das meinete ich damit das die Felder keine Datumsfelder sind, sie sind nur varchar Felder.
 
Werbung:
Ja, primary wird indiziert, aber soweit ich weiß ist es nicht erlaubt einen zusammengesetzen primary Schlüssel zu verwenden. Was aber in dem Fall egal ist, es muss ja kein primary key sein (sofern unique auch auf andere Indizes anwendbar ist).
Ein
Code:
CREATE TABLE `probe`.`test` (
`eins` INT( 10 ) NOT NULL ,
`zwei` INT( 10 ) NOT NULL ,
`drei` INT( 10 ) NOT NULL ,
PRIMARY KEY ( `eins` , `zwei` )
) ENGINE = MYISAM ;
klappt aber problemlos hier bei mir.

..... ich habe einen bilanzkreis. Dieser kommt mehrmals in jedem der 12 Monate vor. JM existiert in allen Feldern und ist überall angepasst (JahrMonat also als bsp. 201001 für januar 2010). Die Beschreibung ist einmalig und kommt in jedem der 12 Monate nur einmal vor......

Die Beschreibung DARF nur einmal pro Monat vorkommen habe ich das richtig verstanden.
Willst du in der Kombination JahrMonat und Beschreibung immer nur eine Beschreibung im Monat zulassen, würde ich JahrMonat und Beschreibung auf Primary Key setzen (der Rest muss nicht indiziert werden, nur diese beiden Spalten).

Dann gehet z.B.

Code:
[FONT=fixedsys]
J[FONT=system]ahrMon|   Bez
201001 | test
201001 | test2
201001 | test3
201002 | test
201003 | test
[/FONT][/FONT]
aber nochmal
201001 - test geht nicht (erster Datensatz, Kombination schon vorhanden)
 
Zurück
Oben