Modify

Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#1679 closed Bug/Fehler (fixed)

Listen Filter SQL Performance

Reported by: Bergau Owned by: somebody
Priority: normal Milestone: modified-shop-2.0.5.0
Component: Shop Version: 2.0.4.2
Keywords: Cc:
Blocked By: Blocking:

Description (last modified by Torsten Riemer)

Basis ist die 2.0.4.2

Wir hatten das Problem, dass die Seite beim Laden einer Kategorie keine Rückmeldung mehr gegeben hatte, nachdem Filter für die Artikel hinzugefügt wurden. Selbst nach Reduzierung der Filter war dies sehr langsam.
Problem war das SQL-Statement zur Ermittlung der Filter. Dieses nahm knapp 20 Sekunden in Anspruch.

Geholfen haben zwei neue Indizes und die Abfrage der Zahlenfelder als Zahl statt Zeichenkette.

Indizes:

ALTER TABLE `products_tags_options` ADD INDEX `products_tags_option_idx_id_filter_id_order` (`languages_id`,`filter`,`options_id`,`sort_order`);
ALTER TABLE `products_tags_values` ADD INDEX `products_tags_values_idx_id_filter_id_order` (`languages_id`,`filter`,`options_id`,`sort_order`);

Die geänderte listing_filter.php ist angehängt.

Attachments (1)

listing_filter.zip (3.6 KB ) - added by Bergau 6 years ago.

Download all attachments as: .zip

Change History (7)

by Bergau, 6 years ago

Attachment: listing_filter.zip added

comment:1 by Torsten Riemer, 6 years ago

Milestone: modified-shop-2.0.5.0
Version: 2.0.4.2

comment:2 by Torsten Riemer, 6 years ago

Description: modified (diff)

comment:3 by Gerhard Waldemair, 6 years ago

Resolution: fixed
Status: newclosed

In 12183:

fix #1679

comment:4 by Torsten Riemer, 6 years ago

In 12184:

Addition on r12183 (fix #1679)

comment:5 by Bergau, 6 years ago

Mir fiel eben auf, dass ich gestern etwas doof war. In der übermittelten Datei ist noch ein kleiner Fehler enthalten. Die Variable $filter_join vermisst ein Leerzeichen in der übermittelten Version, was zu einem SQL-Fehler führt, sobald mehr als ein Filter ausgewählt wird.

Hatte bei mir aus

        $filter_join .= "JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi." 
                              ON pt".$fi.".products_id = p.products_id
                                 AND pt".$fi.".options_id = ".(int)$options_id."
                                 AND pt".$fi.".values_id = ".(int)$values_id;

noch dieses gemacht:

        $filter_join .= " JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi." 
                              ON pt".$fi.".products_id = p.products_id
                                 AND pt".$fi.".options_id = ".(int)$options_id."
                                 AND pt".$fi.".values_id = ".(int)$values_id;

comment:6 by Gerhard Waldemair, 6 years ago

die SQL umschreiben ist nicht zwingend notwendig.

Modify Ticket

Action
as closed The owner will remain somebody.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.