Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Suche in einer Datenbank optimieren.

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Suche in einer Datenbank optimieren.

    Habe derzeit folgendes Script um meine Buchdatenbank zu durchsuchen
    habe nun aber Angst das bei steigender Buchanzahl die Geschwindigkeit
    leidet bzw. sogar Fehler durch Puffer oder Zeit Überläufe entstehen.
    Der SQL Befehl wird hiermit generiert und danach mit mysql_query
    ausgeführt und per while Schleife und mysql_fetch_array dargestellt.
    PHP-Code:
    <?php
        
    if (isset($_POST['SuchString'])) {
            
    $SuchString $_POST['SuchString'];
            
    $sql "SELECT * FROM bestand WHERE Archiv = '' AND ( ";
            if ( isset ( 
    $_POST['BestandID'] ) )                { $sql .= "OR BestandID LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Systematik'] ) )                { $sql .= "OR Systematik LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['ISBN'] ) )                            { $sql .= "OR ISBN LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Verfasser'] ) )                { $sql .= "OR Verfasser LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['VerfasserAngabe'] ) )    { $sql .= "OR VerfasserAngabe LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Titel'] ) )                        { $sql .= "OR Titel LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['TitelZusatz'] ) )            { $sql .= "OR TitelZusatz LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Verlag'] ) )                        { $sql .= "OR Verlag LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Ort'] ) )                            { $sql .= "OR Ort LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Zugangsnummer'] ) )        { $sql .= "OR Zugangsnummer LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Umfang'] ) )                        { $sql .= "OR Umfang LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Jahr'] ) )                            { $sql .= "OR Jahr LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Auflage'] ) )                    { $sql .= "OR Auflage LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Anzahl'] ) )                        { $sql .= "OR Anzahl LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Preis'] ) )                        { $sql .= "OR Preis LIKE '%".$SuchString."%' "; }
            if ( isset ( 
    $_POST['Stichwort'] ) )                { $sql .= "OR Stichwort LIKE '%".$SuchString."%' "; }
            
    $sql str_replace"AND ( OR""AND ( "$sql);
            
    $sql .= " )";
        }
    ?>
    Der Katalog wird etwa mal 6000 bis 10000 Bücher enthalten. Derzeit läuft es noch gut (200 Bücher) aber wenn mal alles eingegebn ist, tja was dann????

    :edit:1
    Wäre es vielleicht Sinnvoller das SELECT nur auf den Primär Schlüssel zu setzen und die Anzeige dann mit Hilfe einer zweiten SQL Abfrage zur realisieren?

    :edit:2
    MySQL 3.23.58
    PHP 4

    :edit:3
    Das updaten des SQL Servers ist nicht möglich.

  • #2
    Hallo,
    vielleicht hilft es Archiv-Einträge in eine Extra-Tabelle zu packen, damit diese nicht die Suche verlangsamen (Archiv = '')?
    Wenn das nicht geht, mach die Spalte "Archiv" lieber zu einem INT-Feld, denn INT-Vergleiche sind viel schneller als String-Vergleiche.
    Im SELECT nur die Primärschlüssel zu holen macht keinen Sinn, schließlich hast du die richtigen Zeilen ja schon getroffen.
    Ansonsten fällt mir nur ein, (häufige) Suchanfragen zu cachen.

    Aber 6000-10000 Einträge sind eigentlich auch nicht die Welt, müsste schon halbwegs flott gehen.

    Kommentar

    Lädt...
    X