Cześć!
Używam tego moda http://community.invisionpower.com/files/file/5073-m34-collections-system/ (w najnowszej wersji)
Działający można zobaczyć tutaj http://www.piwo.org/katalog/
Wejście w najliczniejszą kategorię (171 wpisów), powoduje prawie 3-7 sekundowe generowanie strony. Muli się strasznie.
Slow log pokazuje, że to poniższe zapytanie jest za to odpowiedzialne.
# Time: 130401 17:04:17
# User@Host: root[root] @ localhost []
# Query_time: 6.292930 Lock_time: 0.000145 Rows_sent: 10 Rows_examined: 884984
use table_1;
SET timestamp=1364828657;
SELECT gl.*,gi.*,r.rate_id, avg(r.rating) as item_rating,cf.* FROM ipb_collections_items gl LEFT JOIN ipb_collections_images gi ON ( gl.default_image=gi.image_id )
LEFT JOIN ipb_collections_rating r ON ( gl.id=r.rate_item_id )
LEFT JOIN ipb_collections_fields_user cf ON ( cf.value_item_id=gl.id ) WHERE cid=4 GROUP BY gl.id ORDER BY date_added desc LIMIT 10,10;
W kodzie wygląda to tak
// Get Item List
//-----------------------------------------
$thumbnail = explode( 'x', strtolower( $this->settings['css_small_thumbnail'] ) );
$this->DB->build( array(
'select' => 'gl.*', 'group' => 'gl.id', 'from' => array('collections_items' => 'gl'), 'order' => "{$orderby} {$orderhow}", 'limit' => ar
ray( $page,$max_results ),
'add_join' => array
(
0 => array( 'select' => 'gi.*', 'from' => array( 'collections_images' => 'gi' ), 'where' => "gl.default_image=gi.image_id", 'type' => 'left
'),
1 => array( 'select' => 'r.rate_id, avg(r.rating) as item_rating', 'from' => array( 'collections_rating' => 'r' ), 'where' => "gl.id=r.rate_ite
m_id", 'type' => 'left' ),
2 => array( 'select' => 'cf.*', 'from' => array( 'collections_fields_user' => 'cf' ), 'where' => "cf.value_item_id=gl.id", 'type' => 'left'),
), 'where' => $where ));
$this->DB->execute();
while( $data = $this->DB->fetch() )
{
$data['item_rating'] = round( $data['item_rating'] );
# Fixed Thumbnail
$data['thumb_width'] = $thumbnail[0];
$data['thumb_height'] = $thumbnail[1];
$data = $this->registry->getClass('collections_functions')->field_process( $data );
$items[] = $data;
}
Czy ma ktoś wiedzę, żeby pomóc co jest nieoptymalnego w tym zapytaniu ? Napisałem do autora, ale szybko się odpowiedzi raczej nie spodziewam.
Dzięki za sugestie!
ps: jeżeli ktoś używa tej aplikacji, to będe wdzięczny za info w celu porównania co i jak.