Problemem mit MYSQL / SELF JOIN

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problemem mit MYSQL / SELF JOIN

    sobald ich folgenden Self Join über phpmyadmin ausführe
    PHP-Code:
    SELECT a.vergleichsnr,b.vergleichsnr FROM vergleichsnummern ,vergleichsnummern b WHERE 
    a
    .herst=999 AND a.aktualitaet
    AND a.masternr=b.masternr 
    wird der mysql Client verrückt....schnellt auf 50% Prozessorlast hoch und anch einer Weile kommt:
    "die Webseite ist zu beschäftig um die Webseite anzeigen zu können"
    , und CGI/Fastcgi wird geschlossen....

    Umgebung
    Zend Studio
    Zend platform
    Mysql 5 Server
    php 5
    Apache 2

    führe ich das ganze als mysqli query über php aus macht er das locker ohne zu mucken
    Zuletzt geändert von martin2; 27.06.2008, 22:12.
    <?php echo "ad astra"; ?>
    www.utopiafuture.de

  • #2
    Du solltest diese Grundlagen beachten. Dann wirds vermutlich um einiges besser laufen.

    Kommentar


    • #3
      PHP-Code:
      SELECT 
      a
      .vergleichsnr,
      b.vergleichsnr FROM 
      vergleichsnummern a INNER JOIN vergleichsnummern b USING
      (masternr
      WHERE a.herst=999 AND a.aktualitaet=AND b.herst!=999 
      hat den selben effekt
      <?php echo "ad astra"; ?>
      www.utopiafuture.de

      Kommentar


      • #4
        phpMyAdmin und dein Script liegen auf dem selben Server? Gibt es sonstige Unterschiede?

        Letztendlich führt PMA ja auch nur ein mysql_query() aus.

        Kommentar


        • #5
          in meinem script führe ich das mysqli aus

          ansonsten keinen unterschied

          hab die Query jetzt mal mit einem limt versehen

          PHP-Code:
          SELECT a.vergleichsnrb.vergleichsnr
          FROM vergleichsnummern a
          INNER JOIN vergleichsnummern b
          USING 
          masternr 
          WHERE a.herst =999
          AND a.aktualitaet =1
          AND b.herst !=999
          AND b.aktualitaet <5
          LIMIT 0 
          50 
          kein Problem

          vieleicht liegt es an der größe der Tabelle 1,6 millionen Datensätze....
          Zuletzt geändert von martin2; 27.06.2008, 22:41.
          <?php echo "ad astra"; ?>
          www.utopiafuture.de

          Kommentar


          • #6
            vieleicht liegt es an der größe der Tabelle 1,6 millionen Datensätze....
            Die sollte doch in MyAdmin genauso sein, oder nicht?

            Kommentar


            • #7
              im php script hab ich mir einen view mit der query angelegt, kein Problem

              ich galube ich hab einen bug in meinem mysql Server der wird jetzt auch bei

              PHP-Code:
              SELECT masternr,fnr FROM v_vergleichsnummern  WHERE vergleichsnr '12367'  LIMIT 0,20 
              ganz langsam.... und es ist egal ob ich das über php oder pma abschiesse...
              <?php echo "ad astra"; ?>
              www.utopiafuture.de

              Kommentar


              • #8
                @TobiaZ: Afaik schreibt PMA die Query um. Es wird einmal ein COUNT(*) für die Trefferzahl ausgeführt und einmal die eingegebene Query mit angehangenem LIMIT.

                1,6 Mio. Datensätze sind eigentlich kein Problem für MySQL, sofern genügend Speicher vorhanden ist (am besten soviel, dass die Tabelle zweimal komplett reinpasst) und die richtigen Indizes gesetzt sind.
                Schau dir mal SHOW STATUS und EXPLAIN deiner Query an. Beides gibt es auch irgendwo in PMA, aber aus dem Kopf weiß ich nicht wie man da hinkommt.

                Kommentar


                • #9
                  OffTopic:
                  Kann natürlich gut sein. Deinen Threads nach zu urteilen scheint da ja einiges nicht ganz rund zu laufen...

                  Kommentar


                  • #10
                    OffTopic:
                    Kann natürlich gut sein. Deinen Threads nach zu urteilen scheint da ja einiges nicht ganz rund zu laufen...
                    [/QUOTE]

                    Oh ja und das ganze Problem hat angefangen als ich mir hier eine Oracle Datenbank installiert habe..... habe den Arbeitsspeicher von 1gig auf 4 erhöht danach lief eigendlich alles rund, aber seit der import abgeschlossen ist (von Oracle nach MySql) habe ich hier probleme die ich so noch garnicht kannte.... und ich mach das hier ja auch nicht erst seit 2 Wochen.... das Querys in unendliche laufen, die Meldung "Webseite ist zu beschäftigt um die Webseite anzuzeigen" ist typisch Windows genau wie "unbekannt hat unbekannten Fehler in unbekannt verursacht, unbekannt wird geschlossen"
                    <?php echo "ad astra"; ?>
                    www.utopiafuture.de

                    Kommentar


                    • #11
                      PHP-Code:
                      SELECT masternr,fnr FROM v_vergleichsnummern  WHERE vergleichsnr '12367'  LIMIT 0,20 
                      Warum ist die vergleichsnr ein String?
                      Ich kann mir schon vorstellen, dass es bei 1,6 mio Datensätze ohne richtige Indezes langsam langsam wird.
                      Alos, gib mal ein paar mehr Infos, bitte.
                      Assembler ist eine Methode,
                      Programme, die zu langsam laufen,
                      so umzuschreiben,
                      dass sie überhaupt nicht mehr laufen.

                      Kommentar


                      • #12
                        Warum ist die vergleichsnr ein String?

                        weil der Wert auch "1V456G3' sein könnte VARCHAR FELD

                        ein index auf vergleichsnr lässt sich nicht setzten da diese Spalte mehrer gleiche Werte enthalten kann, liesse sich vielleicht mit einem FULLTEXT umgehen. habe mir einen view gemacht der die zuordnungen eindeutiger hat, kann mir auch nicht erklären warum die orignialdatenbank aus Oracle so aufgebut wurde, da sind selbstbezüge drin, die ich so nie gemacht hätte, die artikel nummer ist nur zu ermitteln wenn die vergleichsnr eines bestimmten herstellers mit der manr eines anderen übereinstimmt.... fragt mich nicht nach dem sinn.... die tabelle ist so....
                        <?php echo "ad astra"; ?>
                        www.utopiafuture.de

                        Kommentar


                        • #13
                          Original geschrieben von martin2
                          ein index auf vergleichsnr lässt sich nicht setzten da diese Spalte mehrer gleiche Werte enthalten kann
                          Deswegen kannst du die Spalte nicht PRIMARY oder UNIQUE machen, aber einen INDEX kannst du sehr wohl anlegen.

                          Kommentar


                          • #14
                            Deswegen kannst du die Spalte nicht PRIMARY oder UNIQUE machen, aber einen INDEX kannst du sehr wohl anlegen.
                            hab ich auch grade gemerkt.... navicat gibt einem dieses option phpmyadmin nicht... kannte bisher nur die UNIQUE bzw PRIMARY Variante bzw den FULLTEXT
                            Zuletzt geändert von martin2; 28.06.2008, 14:43.
                            <?php echo "ad astra"; ?>
                            www.utopiafuture.de

                            Kommentar


                            • #15
                              phpmyadmin nicht
                              Natürlich kannst du auch mit (einer halbwegs aktuellen version von) phpMyAdmin einen normalen INDEX setzen.

                              Kommentar

                              Lädt...
                              X