Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Suchfunktion dauert zu lange

    jvb94

    • Mitglied
    • Beiträge: 118
    Suchfunktion dauert zu lange
    am: 02. April 2012, 09:04:34
    Guten Morgen,

    sitze nun wieder mal an der Suchfunktion und habe ein paar fragen.
    Ich habe im Shop um den es sich grade handelt ca. 3000 Artikel und dazu ca. 6000 Attribute.

    Wenn ich einen Artikel nach einer Artikelnummer suche und das suchen nach Attributen deaktiviert habe, findet er den Artikel innerhalb von Sekunden.

    Wenn ich das Suchen in Attributen aktiviere sucht er ca. 40 sekunden lang.

    Suchen in der Artikelbeschreibung habe ich Deaktiviert, ansonsten ist die fehlertolerante Suche aktiviert.

    Nun hab ich den Shop auf meinen Lokalen Xampp Server gesetzt, da läuft er auch nicht besser.
    Habe nun mal eine Suche Lokal gestartet und gesehen, dass die auslastung des CPUs durch die mysql.exe um 25% steigt, normal ist sie bei 0-5% .

    Nun zum Hosting. Wir Hosten bei unserer Softwarefirma auf deren ihrem Server. Scheinbar laufen auf diesem Server mehrere Seiten, der PHP Info konnte ich entnehmen, dass es sich dabei um einen Windows Server handelt.

    Nun stellt sich die frage ob das problem damit aus der Welt geschaffen wäre, wenn wir uns jetzt einen Debian Server von Hetzner Mieten... Gerne könnt ihr mir auch vorschläge machen welcher es den sein soll.

    Wäre sehr dankbar, wenn ihr mir helfen könnt. Unsere Aussendienstler und Telefonberater möchten dem Kunden gerne über den Webshop den Artikel zeigene, dies ist aber so nicht machbar.

    Unsere Softwarefirma ist seit Monaten informiert und kann uns leider nicht helfen... Die nötigen kenntnise zum betreuen eines eigenen Servers habe ich. Nur um das hier schonmal vorweg zu nehmen.

    Vielen Dank für eure Antworten. Falls ich was vergessen habe bitte nachfragen ;)

    Linkback: https://www.modified-shop.org/forum/index.php?topic=19262.0

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Suchfunktion dauert zu lange
    Antwort #1 am: 02. April 2012, 13:08:25
    Versuch's erstmat damit:
    Code: MySQL  [Auswählen]
    ALTER TABLE  `products_attributes` ADD INDEX (  `attributes_model` )

    Hier muss es auch noch irgendwo ne Liste mit weiteren sinnvollen Indices geben, am besten mal suchen und anwenden.

    Wenn das nichts hilft wäre ein EXPLAIN des betreffenden SELECT von Vorteil.

    jvb94

    • Mitglied
    • Beiträge: 118
    Re: Suchfunktion dauert zu lange
    Antwort #2 am: 02. April 2012, 15:04:23
    Vielen dank für den Tipp.
    Hab das ganze nun mal versucht und merke keinen unterschied.

    Jedoch hab ich auch keine Liste gefunden so mehr dieser Befehle drin stehen.
    Wobei ich im hinterkopf noch denke, dass ich hier im Forum mal eine gesehen hätte.

    Ich such mal weiter, wenn Sie gerade jemand spontan findet kann er sie gerne Posten.

    Viele Grüße

    Joni

    MW

    • Fördermitglied
    • Beiträge: 418
    • Geschlecht:
    Re: Suchfunktion dauert zu lange
    Antwort #3 am: 02. April 2012, 16:29:05
    Vieleicht ist hier etwas bei was dir weiter hilft, hab mir nicht noch mal alles durchgelesen:

    BAUSTELLE: Zusätzliche Indizes für die Datenbank

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Suchfunktion dauert zu lange
    Antwort #4 am: 02. April 2012, 18:17:36
    Das war der, den ich meinte. Ansonsten wäre wie gesagt der EXPLAIN nicht uninteressant.

    jvb94

    • Mitglied
    • Beiträge: 118
    Re: Suchfunktion dauert zu lange
    Antwort #5 am: 03. April 2012, 08:09:16
    Habe nun einige zusätzliche Indizes in die Datenbank eingefügt.
    Hat aber garnichts gebracht was die Suche angeht.

    Ich blicke lieder nicht bei dieser Suchfunktion durch wo genau soll ich das EXPLAIN einsetzen?

    EDIT:

    Scheinbar ist es in der PHP-Datei "advanced_search_result.php" und der Code

    Code: PHP  [Auswählen]
                                                            if (SEARCH_IN_ATTR == 'true') {
                                                       $where_str .= "OR (pov.products_options_values_name LIKE ('%".addslashes(htmlentities($search_keywords[$i], ENT_COMPAT))."%') ";
                                                       $where_str .= "AND pov.language_id = '".(int) $_SESSION['languages_id']."')";
                                                       $where_str .= "OR pa.attributes_model = ('".addslashes(htmlentities($search_keywords[$i], ENT_COMPAT))."') ";
                                                     
                                                       
                                                       }

    der ein wenig zu lange braucht :)

    Hab schon versucht davon einige Befehle weg zu lassen, hat aber nichts gebracht -.-

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Suchfunktion dauert zu lange
    Antwort #6 am: 03. April 2012, 08:28:59
    Vielleicht. Ein EXPLAIN würde da eher Licht ins Dunkel bringen.

    jvb94

    • Mitglied
    • Beiträge: 118
    Re: Suchfunktion dauert zu lange
    Antwort #7 am: 03. April 2012, 08:41:15
    Danke Matt aber wie muss ich das dort reinschreiben?

    Habs paar mal versucht, jedoch wird mir kein ergebniss angezeigt.

    Hab noch nie mit EXPLAIN gearbeitet nur das gleich vorweg.

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Suchfunktion dauert zu lange
    Antwort #8 am: 03. April 2012, 09:02:22
    Du lässt dir das komplette SQL-Statement ausgeben, schreibst EXPLAIN davor und fütterst es dann dem MySQL-Server über die Konsole, phpMyAdmin, Adminer oder was auch immer du bevorzugst.

    jvb94

    • Mitglied
    • Beiträge: 118
    Re: Suchfunktion dauert zu lange
    Antwort #9 am: 03. April 2012, 09:21:58
    OMG, darauf hätte ich echt selber kommen können.

    Hab mir nun mal
    Code: SQL  [Auswählen]
    SELECT DISTINCT p.products_id, p.products_price, p.products_model, p.products_quantity, p.products_shippingtime, p.products_fsk18, p.products_image, p.products_weight, p.products_tax_class_id, p.products_minprice, pd.products_name, pd.products_short_description, pd.products_description FROM products AS p LEFT JOIN products_description AS pd ON (p.products_id = pd.products_id) LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id) AND s.status = '1' WHERE p.products_status = '1' AND pd.language_id = '2' AND ( ( pd.products_keywords LIKE ('%91-6121%') OR pd.products_name LIKE ('%91-6121%') OR p.products_model LIKE ('%91-6121%') OR (pov.products_options_values_name LIKE ('%91-6121%') AND pov.language_id = '2')OR pa.attributes_model LIKE ('%91-6121%') )

    ausgeben lassen und wenn ich das jetzt einfach in Phpmyadmin rüberkopiere krieg ich den error

    Code: SQL  [Auswählen]
    #1064 - You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'LIMIT 0, 30' at line 2

    Hää? Wo ist den da der fehler?

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Suchfunktion dauert zu lange
    Antwort #10 am: 03. April 2012, 09:28:48
    Hast du da nen Umbruch drin? So von wegen 'Line 2'.
    De fehlt ne Klammer am Ende.

    jvb94

    • Mitglied
    • Beiträge: 118
    Re: Suchfunktion dauert zu lange
    Antwort #11 am: 03. April 2012, 09:31:26
    Da ist garkein umbruch drinnen, Phpmyadmin macht ihn sich scheinbar selber und fügt das LIMIT ein.

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Suchfunktion dauert zu lange
    Antwort #12 am: 03. April 2012, 09:39:03
    Also so vom SQL her würde ich auf jeden Fall noch mal folgende Indexe setzen:
    Code: SQL  [Auswählen]
    ALTER TABLE  `products` ADD INDEX (  `products_model` )
    ALTER TABLE  `products_options_values` ADD INDEX (  `products_options_values_name` )

    jvb94

    • Mitglied
    • Beiträge: 118
    Re: Suchfunktion dauert zu lange
    Antwort #13 am: 03. April 2012, 09:40:14
    Ahh stimmt da fehlte eine Klammer

    hier das ergebniss

    SQL-Abfrageergebnis

    Host: localhost
    Datenbank: 20120402
    Erstellungszeit: 03. April 2012 um 09:39
    Erstellt von: phpMyAdmin 3.3.9 / MySQL 5.5.8
    SQL-Befehl: EXPLAIN SELECT distinct p.products_id, p.products_price, p.products_model, p.products_quantity, p.products_shippingtime, p.products_fsk18, p.products_image, p.products_weight, p.products_tax_class_id, p.products_minprice, pd.products_name, pd.products_short_description, pd.products_description FROM products AS p LEFT JOIN products_description AS pd ON (p.products_id = pd.products_id) LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id) AND s.status = '1' WHERE p.products_status = '1' AND pd.language_id = '2' AND ( ( pd.products_keywords LIKE ('%91-6121%') OR pd.products_name LIKE ('%91-6121%') OR p.products_model LIKE ('%91-6121%') OR (pov.products_options_values_name LIKE ('%91-6121%') AND pov.language_id = '2')OR pa.attributes_model LIKE ('%91-6121%') ) );
    Zeilen: 5
    id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
    1    SIMPLE    s    system    NULL    NULL    NULL    NULL    0    const row not found
    1    SIMPLE    p    ALL    PRIMARY    NULL    NULL    NULL    3090    Using where; Using temporary
    1    SIMPLE    pd    eq_ref    PRIMARY    PRIMARY    8    20120402.p.products_id,const    1    Using where
    1    SIMPLE    pa    ALL    NULL    NULL    NULL    NULL    6346    Distinct
    1    SIMPLE    pov    ref    PRIMARY    PRIMARY    4    20120402.pa.options_values_id    63    Using where; Distinct

    Die von dir geposteten Indexe hab ich gesetzt, keine veränderung -.-

    jvb94

    • Mitglied
    • Beiträge: 118
    Re: Suchfunktion dauert zu lange
    Antwort #14 am: 04. April 2012, 07:52:13
    *PUSH*

    hat keiner ne idee?
    Trade Republic - Provisionsfrei Aktien handeln
    11 Antworten
    5393 Aufrufe
    06. Dezember 2009, 19:24:06 von Elmar
    12 Antworten
    9630 Aufrufe
    02. Oktober 2013, 16:40:48 von Andi_FF
    14 Antworten
    6972 Aufrufe
    01. Januar 2013, 14:55:52 von Modulfux
    5 Antworten
    3236 Aufrufe
    08. November 2012, 22:39:59 von Simon