tutorials.de Buch-Aktion 02/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
JA
ANTWORTEN
22
ZUGRIFFE
501
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    428
    Nein, sind genau 13 Zeichen, von denen einigen mit 0 beginnen, es wird nicht mit Nullen aufgefüllt.

    Die beiden ersten Abfragen laufen mittlerweile wunderbar, in 5 Minuten durch.
    Nur die letzte Abfrage, brauch ewig, ich hab eben einmal überschlagen, es würde über 22 Minuten dauern. Werde jetzt einmal testen, ob MySQL es wirklich schafft oder immer abbricht, ab einem Punkt.
    Code sql:
    1
    2
    3
    4
    5
    
    SELECT SUM(amount) AS summe 
                                    FROM mail 
                                    WHERE packetno NOT IN 
                                        (SELECT packetno 
                                        FROM export)

    Durch die 2. CPU kann ich aber einen Thread zu 100% ausnutzen, ohne das der Webserver langsamer wird für andere User.
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  2. #17
    Avatar von bn
    bn bn ist offline Mitglied Brokat
    Registriert seit
    Oct 2002
    Ort
    Berlin
    Beiträge
    395
    Vorweg - mach ein Backup der DB, bevor du Änderungen daran vornimmst. Falls geschehen oder idealerweise die Änderungen zunächst auf einem Testsystem durchgeführt werden - go

    Bzgl. des Servers - nicht verrückt machen .

    Dann stelle den Datentypen von packetno und productno auf VARCHAR(15) um.
    Code sql:
    1
    2
    3
    
    ALTER TABLE mail CHANGE paketno paketno VARCHAR(15) COLLATE latin1_german1_ci NOT NULL;
    ALTER TABLE mail CHANGE productno productno VARCHAR(15) COLLATE latin1_german1_ci NOT NULL;
    ALTER TABLE export CHANGE paketno paketno VARCHAR(15) COLLATE latin1_german1_ci NOT NULL;

    Welche Werte stehen in Scandate drin (Beispiel)?

    cost_unt nach INT wandeln ist optimal.
    Code sql:
    1
    
    ALTER TABLE export CHANGE cost_unit cost_unit INT UNSIGNED DEFAULT 0

    Im Anschluss führe bitte die 3 SQL-Kommandos mit einem voran gestellten EXPLAIN aus und poste die Ergebnisse hier. Beispiel auf der SQL-Konsole:
    Code sql:
    1
    
    EXPLAIN SELECT feld FROM tabelle WHERE 1=1\G

    Grüße BN
     
    Eine Lösung hätte ich schon, aber sie passt nicht zum Problem.

  3. #18
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    428
    Nachdem ich alles umgesetzt habe erhalte ich folgendes Ergebnis.

    1. Abfrage
    Code sql:
    1
    2
    3
    4
    5
    
    -- INSERT INTO mv_tax_sum (tax, cost_unit, summe)
    EXPLAIN SELECT tax, cost_unit, SUM( amount ) AS summe
    FROM mail AS m
    INNER JOIN export AS e ON e.packetno = m.packetno
    GROUP BY cost_unit, tax;


    Ausgabe:
    Code :
    1
    2
    3
    
    id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra 
    1   SIMPLE  m   ALL IDX_m_packetno  NULL    NULL    NULL    28723   Using temporary; Using filesort
    1   SIMPLE  e   ref IDX_e_packetno  IDX_e_packetno  17  spedition.m.packetno    1

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    object(stdClass)#1 (10) {
      ["id"]=>
      string(1) "1"
      ["select_type"]=>
      string(6) "SIMPLE"
      ["table"]=>
      string(1) "m"
      ["type"]=>
      string(3) "ALL"
      ["possible_keys"]=>
      string(14) "IDX_m_packetno"
      ["key"]=>
      NULL
      ["key_len"]=>
      NULL
      ["ref"]=>
      NULL
      ["rows"]=>
      string(5) "28723"
      ["Extra"]=>
      string(31) "Using temporary; Using filesort"
    }
    object(stdClass)#2 (10) {
      ["id"]=>
      string(1) "1"
      ["select_type"]=>
      string(6) "SIMPLE"
      ["table"]=>
      string(1) "e"
      ["type"]=>
      string(3) "ref"
      ["possible_keys"]=>
      string(14) "IDX_e_packetno"
      ["key"]=>
      string(14) "IDX_e_packetno"
      ["key_len"]=>
      string(2) "17"
      ["ref"]=>
      string(20) "spedition.m.packetno"
      ["rows"]=>
      string(1) "1"
      ["Extra"]=>
      string(0) ""
    }

    2. Abfrage:

    PHP-Code:
    mysql_query("CREATE INDEX IDX_e_packetno ON export (packetno)");
    mysql_query("CREATE INDEX IDX_m_packetno ON mail (packetno)"); 
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    
    EXPLAIN SELECT SUM( amount ) AS summe
    FROM mail
    WHERE packetno NOT 
    IN (
     
    SELECT packetno
    FROM export
    )

    Ausgabe:
    Code :
    1
    2
    3
    
    id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra 
    1   PRIMARY mail    ALL NULL    NULL    NULL    NULL    28723   Using where
    2   DEPENDENT SUBQUERY  export  index_subquery  IDX_e_packetno  IDX_e_packetno  17  func    1   Using index

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    object(stdClass)#1 (10) {
      ["id"]=>
      string(1) "1"
      ["select_type"]=>
      string(7) "PRIMARY"
      ["table"]=>
      string(4) "mail"
      ["type"]=>
      string(3) "ALL"
      ["possible_keys"]=>
      NULL
      ["key"]=>
      NULL
      ["key_len"]=>
      NULL
      ["ref"]=>
      NULL
      ["rows"]=>
      string(5) "28723"
      ["Extra"]=>
      string(11) "Using where"
    }
    object(stdClass)#2 (10) {
      ["id"]=>
      string(1) "2"
      ["select_type"]=>
      string(18) "DEPENDENT SUBQUERY"
      ["table"]=>
      string(6) "export"
      ["type"]=>
      string(14) "index_subquery"
      ["possible_keys"]=>
      string(14) "IDX_e_packetno"
      ["key"]=>
      string(14) "IDX_e_packetno"
      ["key_len"]=>
      string(2) "17"
      ["ref"]=>
      string(4) "func"
      ["rows"]=>
      string(1) "1"
      ["Extra"]=>
      string(11) "Using index"
    }
    Geändert von Steusi (17.08.10 um 14:31 Uhr)
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  4. #19
    Avatar von bn
    bn bn ist offline Mitglied Brokat
    Registriert seit
    Oct 2002
    Ort
    Berlin
    Beiträge
    395
    Laufzeit der beiden Queries (ohne Explain)?
     
    Eine Lösung hätte ich schon, aber sie passt nicht zum Problem.

  5. #20
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    428
    1. Query dauerte ca. 5 Minuten.
    2. Query habe ich nach ca. 25 Minuten abgebrochen.

    Paradoxerweise wurden eben alle Berechnungen in 240 ms ausgeführt, ich habe danach alle relevanten Daten zum Test aus der DB entfernt und einen Import+Berechnung durchgeführt, es dauert keine 5 Sekunden, danach war alles erledigt. Dies verstehe ich nicht...
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  6. #21
    Avatar von bn
    bn bn ist offline Mitglied Brokat
    Registriert seit
    Oct 2002
    Ort
    Berlin
    Beiträge
    395
    Nun du hast den Index auf paketno eingefügt. Ich würde vom Explain her sagen, dass die Indexe soweit ganz gut greifen. Viel mehr kann man mit SQL-Mitteln nicht mehr raus holen. 5 Sek klingt "ok".

    5/25 min - da war vlt. der Index noch nicht aufgebaut?
     
    Eine Lösung hätte ich schon, aber sie passt nicht zum Problem.

  7. #22
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    428
    Die Definition der Indizes war seit yaslaw's Tipp dabei. Aber ich hatte das Gefühl, das sie bei einem var_dump mit PHP aufgeführt wurden, jedoch bei PHPMyAdmin erst später, aber dies kann ja nicht sein.
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  8. #23
    Avatar von bn
    bn bn ist offline Mitglied Brokat
    Registriert seit
    Oct 2002
    Ort
    Berlin
    Beiträge
    395
    Ne das kann irgendwie nicht sein, es sei denn du hast auf 2 verschiedenen Datenbanken gearbeitet.

    Nachtrag: Die Indexe waren beim Show Create Table ... aber nicht bei. Das war doch nach Yaslaws Tipp.
    Geändert von bn (17.08.10 um 17:45 Uhr)
     
    Eine Lösung hätte ich schon, aber sie passt nicht zum Problem.

Ähnliche Themen

  1. Optimierung mit VBA 8*8 Felder
    Von fabalab im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 05.05.07, 12:57
  2. Optimierung
    Von son gohan im Forum HTML & XHTML
    Antworten: 8
    Letzter Beitrag: 11.03.05, 13:28
  3. Optimierung im IE....
    Von Garo_TheOne im Forum HTML & XHTML
    Antworten: 0
    Letzter Beitrag: 16.12.04, 00:41
  4. Optimierung
    Von lacosaa im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 24.01.04, 00:49
  5. Pc-optimierung****?
    Von alexmayer2000 im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 19.09.01, 23:48