[SQL allgemein] Tabellenstruktur / Performence

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

  • [SQL allgemein] Tabellenstruktur / Performence

    Abend,

    Also ich hab da nen größeres Performence Problem.. Ich hab ein große Tabelle mit Sängern.. über 10.000 oder sowas

    Und ich hab ein Dynamisches Dropdown mitdem ich einen buchstabe auswähle und dann erscheinen die Interpreten.. Das alles funktioniert ist kein Problem allerdings hab ich ein Problem mit der Schnelligkeit.. Momentan brauch ich 4 Sekunden bis er alle Interprpreten für jeden Buchstabe ausgegeben hat.. Obwohl ich ne Temp Tabelle erstelle und nen Index setze..

    Tabelle
    id | interpret


    Mein Code für den Include

    PHP-Code:

    <script language="Javascript">
    <!-- Start



    function update_auswahl() 
    {
    var kategorieAuswahl = document.forms.verzeichnis.kategorie;
    var unterkategorieAuswahl = document.forms.verzeichnis.unterkategorie;
    unterkategorieAuswahl.options.length = 0; // DropDown Menü entleeren


    <?php

    //Temp Tabelle damits schneller geht inkl. Index
    mysql_query("CREATE TEMPORARY TABLE temp_interpret_buchstabe
    SELECT SUBSTRING(interpret,1,1) as buchstabe,interpret from
    songfire_interpreten order by buchstabe ASC"
    ) or
    die(
    mysql_error());
    mysql_query("ALTER TABLE `temp_interpret_buchstabe` ADD INDEX (`buchstabe`) ") or die(mysql_error());

    //Hauptkats ausgeben
    $a=mysql_query("SELECT buchstabe from temp_interpret_buchstabe GROUP BY buchstabe order by buchstabe
    ASC"
    ) or die(mysql_error());

      while(
    $temp=mysql_fetch_array($a)){
      
      
          if(
    ereg("[A-Za-z]",$temp[buchstabe])){
          
    $temp[buchstabe] = strtoupper($temp[buchstabe]);
          }
            else{
            
    $temp[buchstabe] = "#";
            }
      
     
      

    ?>


    if (kategorieAuswahl.options[kategorieAuswahl.selectedIndex].value == "<?php echo $temp[buchstabe]; ?>" )
    {

    <?php

    if($temp[buchstabe] == '#'){
    $b=mysql_query("SELECT interpret FROM
    `temp_interpret_buchstabe` WHERE buchstabe REGEXP '^[^A-Z]'"
    )
    or die(
    mysql_error());
    }
        else{
        
    $b=mysql_query("SELECT interpret FROM `temp_interpret_buchstabe` WHERE buchstabe =
    '
    $temp[buchstabe]'") or die(mysql_error());
        }


    $counter 0;

      while(
    $temp2=mysql_fetch_array($b)){
    ?>

    unterkategorieAuswahl.options[<?php echo $counter?>] = new Option("<?php echo $temp2[interpret]; ?>");

    <?php
      $counter
    ++;
      }
    ?>

    }


    <?php
      
    }
    ?>


    }

    // Ende -->
    </script>

    Würd mich über par tipps freuen da ich im Bereich Preformence nich soviel ahnung hab


    mfg Sebastian
    Zuletzt geändert von Sebastian.J; 04.03.2006, 23:42.

  • #2
    Bitte brich deinen Code so um, dass man nicht mehr nach rechts scrollen muß! Danke.

    10.000 Datensätze sind für MySQL kein Problem, die 4 Sekunden dauerts wohl, weil du erstmal eine temporäre Tabelle erzeugst und darüber einen Index.

    Du möchtest doch nur alle Interpreten mit einem bestimmten Anfangsbuchstaben ausgeben. Das kannst du mit SELECT ... WHERE interpret LIKE '{$initial}%'. Falls du das noch weiter optimieren möchtest, lege eine weitere Spalte an, die den Anfangsbuchstaben der Spalte interpret enthält. Dann kannst du darüber einen Index anlegen und statt mit LIKE eine exakte Suche mit WHERE initial = '{$initial}' machen.

    Kommentar


    • #3
      Ja also das erstellen der Temp Tabelle wurd erst später von mir gemacht... Es hat das ganze auch schneller gemacht...

      Das was so lange dauert ist dieser teil hier

      PHP-Code:

      if (kategorieAuswahl.options[kategorieAuswahl.selectedIndex].value == "<?php echo $temp[buchstabe]; ?>" )
      {

      <?php

      if($temp[buchstabe] == '#'){
      $b=mysql_query("SELECT interpret FROM
      `temp_interpret_buchstabe` WHERE buchstabe REGEXP '^[^A-Z]'"
      )
      or die(
      mysql_error());
      }
          else{
          
      $b=mysql_query("SELECT interpret FROM
      `temp_interpret_buchstabe` WHERE buchstabe ='
      $temp[buchstabe]'") or die(mysql_error());
          }


      $counter 0;

        while(
      $temp2=mysql_fetch_array($b)){
      ?>

      unterkategorieAuswahl.options[<?php echo $counter?>] = new Option("<?php echo $temp2[interpret]; ?>");

      <?php
        $counter
      ++;
        }
      ?>

      }


      <?php
        
      }
      ?>

      Obwohl nen Index gesetzt ist, dauerts lange.... Vieleicht weil er ja alles in einer Schleife durchgeht?

      Muss das unbedingt schneller bekommen weil ich das ganze noch erweitern muss.. Denn jeder Interpret hat auch seine titel ;-)

      Gruss Sebastian

      Kommentar


      • #4
        Also wie ich durch langes durchtesten gesehen habe, liegt das nich an dem Tabellen Design sondern einfach am Laden der Menge...

        Deswegen ist dafür ne JavaScript methode schlecht geeignet... Werde das mit neuem Laden der Seite lösen müssen

        Danke

        Kommentar

        Lädt...
        X