MySql Join bei grossen Tabellen

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

  • MySql Join bei grossen Tabellen

    Hallo zusammen,
    ein für mich unlösbares Problem tut sich auf seit ich den Provider gewechselt habe. Eine MySQL-Abfrage über 2 Tabellen läuft nicht mehr.

    Tabelle 1
    satznummer
    gattung
    art
    ...

    Tabelle 2
    id
    satznummer
    fundort
    funddatum
    meldername
    ...

    Tabelle 1 hat 15.000 Zeilen
    Tabelle 2 10.000 Zeilen

    meine PHP-Abfrage, die bisher anstandslos ausgeführt wurde:

    $abfrage = "SELECT DISTINCT gattung FROM myco2dat,neufunde where myco2dat.gattung LIKE '$suchbuchstabe%' and BINARY neufunde.satznummer = BINARY myco2dat.satznummer";

    die hab ich jetzt, weil sie bei dem neuen Provider kein Resultat brachte wie folgt geändert aber auch ohne Resultat:

    $abfrage = "SELECT DISTINCT myco2dat.gattung FROM myco2dat where myco2dat.gattung LIKE '$suchbuchstabe%' INNER JOIN neufunde ON BINARY neufunde.satznummer = BINARY myco2dat.satznummer";

    Ich habe testweise mit kleineren Tabellen gearbeitet. Bis etwa 1000 Zeilen läuft das ganze.

    Gibt es Alternativen, etwa durch PHP-Programmierung, die aber auch schnell genug sind ?
    Oder soll ich den Provider wieder verlassen ?

    Danke für Meinungen
    Cyathus

  • #2
    Schau dir mal nen EXPLAIN SELECT an... hat übrigens nix mit PHP sondern mit SQL zu tun
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Danke für den Hinweis,

      es kommt die Meldung SQL_MAX_JOIN_SIZE bzw. SQL_BIG_SELECTS zu setzen. Das wird mir wahrscheinlich nichts bringen weil diese Werte wohl nur von meinem Provider beeinflusst werden.

      Außerdem meldete MySQL einen Syntax-Fehler. Den Inner Join mochte er nicht hinter der where-Klausel. Ich habe jetzt umgestellt, die where-Klausel nach hinten:

      SELECT DISTINCT gattung FROM myco2dat INNER JOIN neufunde ON neufunde.satznummer = myco2dat.satznummer where myco2dat.gattung LIKE 'P%'

      Dann habe ich noch auf myco2dat.gattung indiziert.
      Jetzt findet er alle Gattungen mit den Anfangsbuchstaben des Alphabet, nur 'P' mag er nicht, weil zuviele Gattungen mit 'P' anfangen. Hier kommt wieder die Meldung:
      SET SQL_MAX_JOIN_SIZE bzw. SET SQL_BIG_SELECTS...

      Was mach ich nur (falsch) ?

      Cyathus

      Kommentar


      • #4
        Vielleicht würde da eine limitierte Abfrage helfen (bin mir aber nicht sicher)
        zähle z.B. zuerst gattungen die wie Suchwort aussehen. Dann machst du LIMIT = zahl der gattungen.

        Kommentar


        • #5
          Grenze die Menge des Ergebnises per LIMIT ein, welcher User will denn 1000 DS auf einmal sehen

          Kommentar


          • #6
            Danke für den LIMIT-Hinweis.

            Er bringt leider nichts.

            Ich werde jetzt versuchen über 27 Hilfstabellen (eine für jeden Buchstaben des Alphabets) die Funktion zu retten.

            Wen's interessiert kann über den folgenden Link sich die Sache anschauen:

            http://brd.pilzkartierung.de

            dort unter Funddaten-Abfrage(Arten) ein Bundesland wählen und dann mal 'P' eingeben.

            Gruß
            Cyathus
            Zuletzt geändert von Cyathus; 13.02.2006, 17:35.

            Kommentar


            • #7
              Die Site funktioniert nicht ...
              Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
              var_dump(), print_r(), debug_backtrace und echo.
              Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
              Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
              Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

              Kommentar


              • #8
                sorry, jetzt gehts.

                Kommentar

                Lädt...
                X