Partage
  • Partager sur Facebook
  • Partager sur Twitter

Regexp sur jointure mysql

Est-ce possible ?

Sujet résolu
    13 mai 2011 à 16:56:03

    Bonjour,

    Voici mon problème j'ai deux table que j' essaie de joindre ensemble pour gagner en temps d'execution

    Une table products_description :

    Colonne 	Type 	Null 	Défaut 	Commentaires
    products_id 	int(11) 	Non  	  	 
    language_id 	int(11) 	Non  	1  	 
    products_name 	varchar(128) 	Non  	  	 
    products_description 	text 	Oui  	NULL  	 
    products_url 	varchar(255) 	Oui  	NULL  	 
    products_viewed 	int(5) 	Oui  	0  	 
    extra_value_id2 	int(10) 	Non  	0  	 
    extra_value_id3 	int(10) 	Non  	0  	 
    extra_value_id4 	int(10) 	Non  	0  	 
    extra_value_id5 	int(10) 	Non  	0  	 
    extra_value_id6 	int(10) 	Non  	0  	 
    extra_value_id8 	int(10) 	Non  	0  	 
    extra_value_id9 	int(10) 	Non  	0
    


    ET une extra_field_values :

    Colonne 	Type 	Null 	Défaut 	Commentaires
    value_id 	int(10) 	Non  	  	 
    epf_id 	int(10) 	Non  	  	 
    languages_id 	int(11) 	Non  	  	 
    parent_id 	int(10) 	Non  	0  	 
    sort_order 	int(11) 	Non  	0  	 
    epf_value 	varchar(64) 	Oui  	NULL
    


    Je dois joindre les deux table pour que ce qui est contenu dans products_description.extra_value_id[0-9] et que je retrouve dans extra_field_values.epf_id correspondent à la description textuelle contenue dans extra_field_values.epf_value (Pas facile a expliquer !!)

    En gros une jointure qui fonctionne donne ceci :

    SELECT DISTINCT pd.products_id, epf.epf_value from products_description pd left join extra_field_values epf on (pd.extra_value_id3 = epf.value_id)
    


    Sauf que je suis obligé de faire 7 jointure rien que lire tout les infos qui m'intéresse et sur une base de données de 10000 articles çà met une éternité même avec des index.

    DOnc ma question est puis-je faire qqchose qui serait du genre avec une regex ou autre :

    SELECT DISTINCT pd.products_id, epf.epf_value from products_description pd left join extra_field_values epf on (pd.extra_value_id[0-9] = epf.value_id)
    


    Ou si qq1 à une idée de requête optimisée qui m'éviterais 45s de chargement ...

    D'avance merci,

    Cdt
    • Partager sur Facebook
    • Partager sur Twitter
      13 mai 2011 à 16:59:25

      Ce qu'il faudrait surtout, à mon humble avis, c'est enlever ces moches colonnes extra_value_idX et faire une table intermédiaire avec 2 colonnes : product_desc_id et extra_value_id.
      • Partager sur Facebook
      • Partager sur Twitter
        13 mai 2011 à 17:09:35

        Citation : Taguan

        Ce qu'il faudrait surtout, à mon humble avis, c'est enlever ces moches colonnes extra_value_idX et faire une table intermédiaire avec 2 colonnes : product_desc_id et extra_value_id.



        Peux tu me donner plus de précision sur ton idée car chaque extra_value_idX correspond a un attribut produit différent ( couleur, taille ..)

        Merci de ton aide,

        Cdt
        • Partager sur Facebook
        • Partager sur Twitter
          13 mai 2011 à 17:15:10

          Je comprends pas...

          Au lieu d'avoir 36 colonnes dans ta table products_description, tu aurais 36 lignes par products_description dans la table intermédiaire.
          • Partager sur Facebook
          • Partager sur Twitter
            13 mai 2011 à 17:30:08

            Oui je sais bien que celà aurait été la solution idéale mais à la base la conception de cette base n'est pas de mon ressort mais celle d'un prestataire basée sur un CMS e-commerce et j'aimerais éviter de tout refaire, d'ou ma question pour optimiser la requête en limitant les jointure, tu penses qu'en l'état c'est impossible ?
            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2011 à 18:58:39

              Ce serait pas cette merde fumante d'osCommerce ?

              > Sauf que je suis obligé de faire 7 jointure rien que lire
              > tout les infos qui m'intéresse et sur une base de données
              > de 10000 articles çà met une éternité même avec des index.

              Y a quand même pas de raison que ça prenne une éternité. Envoie les définitions des 2 tables (SHOW CREATE TABLE), ta monster-requête et un EXPLAIN de ta monster-requête.
              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2011 à 18:17:27

                Hello,

                Merci pour ta réponse, Oui c'est bien osc ...

                SHOW CREATE TABLE (pour info ça sert à quoi ?) :

                products_description 	435245415445205441424c45206070726f64756374735f6465736372697074696f6e6020280a20206070726f64756374735f2e2e2e
                


                extra_field_values 	435245415445205441424c45206065787472615f6669656c645f76616c7565736020280a20206076616c75655f69646020692e2e2e
                


                La requête complète, d'autres tables sont jointes par rapport à ma demande initiale, je voulais y aller progressivement pour l'alléger :

                SELECT SQL_CALC_FOUND_ROWS DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id FROM products p LEFT JOIN products_description pd on (p.products_id = pd.products_id) LEFT JOIN products_to_categories p2c on (p.products_id = p2c.products_id) LEFT JOIN categories c on (c.categories_id = p2c.categories_id) left join categories_description as cd on (c.categories_id = cd.categories_id and cd.language_id = "4") LEFT JOIN extra_field_values AS epf ON (epf.value_id = extra_value_id2 or epf.value_id = extra_value_id3 or epf.value_id = extra_value_id4 or epf.value_id = extra_value_id5 or epf.value_id = extra_value_id6 or epf.value_id = extra_value_id8 or epf.value_id = extra_value_id9 ) and (epf.languages_id = "4") WHERE (p2c.categories_id = "89915" or p2c.categories_id = "89916" or p2c.categories_id = "89917" or p2c.categories_id = "89936" or p2c.categories_id = "89958" or p2c.categories_id = "92107") AND p.products_status = "1" AND p.vendu = "0" AND pd.language_id = "4" GROUP BY epf.epf_value ORDER BY epf.sort_order, epf.epf_value
                


                Le Explain :

                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 	p2c 	range 	PRIMARY,products_id,categories_id 	categories_id 	4 	NULL 	79 	Using where; Using temporary; Using filesort
                1 	SIMPLE 	c 	eq_ref 	PRIMARY 	PRIMARY 	4 	laurent.p2c.categories_id 	1 	Using index
                1 	SIMPLE 	p 	eq_ref 	PRIMARY,products_status 	PRIMARY 	4 	laurent.p2c.products_id 	1 	Using where
                1 	SIMPLE 	cd 	eq_ref 	PRIMARY 	PRIMARY 	8 	laurent.c.categories_id,const 	1 	Using index
                1 	SIMPLE 	pd 	eq_ref 	PRIMARY,language_id 	PRIMARY 	8 	laurent.p2c.products_id,const 	1 	Using where
                1 	SIMPLE 	epf 	ALL 	PRIMARY 	NULL 	NULL 	NULL 	6499
                


                EN cas de besoin :

                categories 	435245415445205441424c45206063617465676f726965736020280a20206063617465676f726965735f69646020696e74282e2e2e
                


                products_to_categories 	435245415445205441424c45206070726f64756374735f746f5f63617465676f726965736020280a20206070726f647563742e2e2e
                


                products 	435245415445205441424c45206070726f64756374736020280a20206070726f64756374735f69646020696e7428313129202e2e2e
                


                Merci,
                • Partager sur Facebook
                • Partager sur Twitter
                  14 mai 2011 à 19:07:17

                  SHOW CREATE TABLE ça donne la définition de la table...

                  mysql> show create table b_test;
                  +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
                  | Table  | Create Table                                                                                                                                                                          |
                  +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
                  | b_test | CREATE TABLE `b_test` (
                    `id` int(11) NOT NULL AUTO_INCREMENT,
                    `x` int(11) NOT NULL DEFAULT '0',
                    PRIMARY KEY (`id`)
                  ) ENGINE=MyISAM AUTO_INCREMENT=262145 DEFAULT CHARSET=latin1 |
                  +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+


                  Je me demande d'où sortent tes machins en hexa ! Essaie encore :D

                  La requête : indente, c'est illisible ;)

                  Elle prend combien de temps ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mai 2011 à 9:21:02

                    Hello,

                    Oui j'ai sorti ça en ligne de commande c'est mieux :

                    | Table                | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
                    +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
                    | products_description | CREATE TABLE `products_description` (
                      `products_id` int(11) NOT NULL auto_increment,
                      `language_id` int(11) NOT NULL default '1',
                      `products_name` varchar(128) NOT NULL,
                      `products_description` text,
                      `products_url` varchar(255) default NULL,
                      `products_viewed` int(5) default '0',
                      `extra_value_id2` int(10) unsigned NOT NULL default '0',
                      `extra_value_id3` int(10) unsigned NOT NULL default '0',
                      `extra_value_id4` int(10) unsigned NOT NULL default '0',
                      `extra_value_id5` int(10) unsigned NOT NULL default '0',
                      `extra_value_id6` int(10) unsigned NOT NULL default '0',
                      `extra_value_id8` int(10) unsigned NOT NULL default '0',
                      `extra_value_id9` int(10) unsigned NOT NULL default '0',
                      PRIMARY KEY  (`products_id`,`language_id`),
                      KEY `products_name` (`products_name`),
                      KEY `extra_value_id2` (`extra_value_id2`),
                      KEY `extra_value_id3` (`extra_value_id3`),
                      KEY `extra_value_id4` (`extra_value_id4`),
                      KEY `extra_value_id5` (`extra_value_id5`),
                      KEY `extra_value_id6` (`extra_value_id6`),
                      KEY `extra_value_id8` (`extra_value_id8`),
                      KEY `extra_value_id9` (`extra_value_id9`),
                      KEY `language_id` (`language_id`),
                      FULLTEXT KEY `products_description` (`products_description`)
                    ) ENGINE=MyISAM AUTO_INCREMENT=54263 DEFAULT CHARSET=latin1 |
                    +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
                    1 row in set (0.00 sec)
                    
                    mysql> show create table extra_field_values;
                    +--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
                    | Table              | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
                    +--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
                    | extra_field_values | CREATE TABLE `extra_field_values` (
                      `value_id` int(10) unsigned NOT NULL auto_increment,
                      `epf_id` int(10) unsigned NOT NULL,
                      `languages_id` int(11) NOT NULL,
                      `parent_id` int(10) unsigned NOT NULL default '0',
                      `sort_order` int(11) NOT NULL default '0',
                      `epf_value` varchar(64) default NULL,
                      PRIMARY KEY  (`value_id`),
                      KEY `IDX_EPF` (`epf_id`,`languages_id`),
                      KEY `epf_id` (`epf_id`)
                    ) ENGINE=MyISAM AUTO_INCREMENT=33005 DEFAULT CHARSET=latin1 |
                    +--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
                    1 row in set (0.00 sec)
                    
                    mysql> EXPLAIN SELECT SQL_CALC_FOUND_ROWS DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id FROM products p LEFT JOIN products_description pd on (p.products_id = pd.products_id) LEFT JOIN specials s on (p.products_id = s.products_id) LEFT JOIN products_to_categories p2c on (p.products_id = p2c.products_id) LEFT JOIN categories c on (c.categories_id = p2c.categories_id) left join categories_description as cd on (c.categories_id = cd.categories_id and cd.language_id = "4") LEFT JOIN extra_field_values AS epf ON (epf.value_id = extra_value_id2 or epf.value_id = extra_value_id3 or epf.value_id = extra_value_id4 or epf.value_id = extra_value_id5 or epf.value_id = extra_value_id6 or epf.value_id = extra_value_id8 or epf.value_id = extra_value_id9 ) and (epf.languages_id = "4") WHERE (p2c.categories_id = "90098" or p2c.categories_id = "90103" or p2c.categories_id = "90104" or p2c.categories_id = "90105" or p2c.categories_id = "90106" or p2c.categories_id = "90109" or p2c.categories_id = "90110") AND p.products_status = "1" AND p.vendu = "0" AND pd.language_id = "4" GROUP BY epf.epf_value ORDER BY epf.sort_order, epf.epf_value;
                    +----+-------------+-------+--------+-----------------------------------+---------------+---------+-------------------------------+------+----------------------------------------------+
                    | 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      | p2c   | range  | PRIMARY,products_id,categories_id | categories_id | 4       | NULL                          |   10 | Using where; Using temporary; Using filesort |
                    |  1 | SIMPLE      | c     | eq_ref | PRIMARY                           | PRIMARY       | 4       | laurent.p2c.categories_id     |    1 | Using index                                  |
                    |  1 | SIMPLE      | p     | eq_ref | PRIMARY,products_status           | PRIMARY       | 4       | laurent.p2c.products_id       |    1 | Using where                                  |
                    |  1 | SIMPLE      | cd    | eq_ref | PRIMARY                           | PRIMARY       | 8       | laurent.c.categories_id,const |    1 | Using index                                  |
                    |  1 | SIMPLE      | pd    | eq_ref | PRIMARY,language_id               | PRIMARY       | 8       | laurent.p2c.products_id,const |    1 | Using where                                  |
                    |  1 | SIMPLE      | epf   | ALL    | PRIMARY                           | NULL          | NULL    | NULL                          | 6499 |                                              |
                    +----+-------------+-------+--------+-----------------------------------+---------------+---------+-------------------------------+------+----------------------------------------------+
                    7 rows in set (0.00 sec)


                    Le résultat dépend du nombre de produit entre 7 et 45s ..

                    Merci par avance de ton aide
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 mai 2011 à 14:46:36

                      Effectivement voilà une requête qu'elle est bien pourrie ! Les index sur extra_field_values ne sont pas utilisés.

                      La requête est censée produire quoi ? (explique)

                      Pour tester ça il me faut un export de tes 2 tables avec des vraies données dedans.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 mai 2011 à 8:34:09

                        C'est censé produire le contenu pour des selects, qui servent ensuite à filtrer la recherche pour le client.

                        Du style www.monsite.com/index.php?extra_value_id3=2145)

                        Donc il faut que les selects n'affichent que les valeurs contenue dans la table products_description d'ou la jointure.

                        Pour les exemples de données je t'envoi qqchose en MP si je peux.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 mai 2011 à 9:37:37

                          Tu utilises des LEFT JOIN partout, t'es certain d'en avoir réellement besoin ?
                          Ensuite remplace tes OR par des IN ( ... )

                          Essaie comme ça:
                          SELECT SQL_CALC_FOUND_ROWS 
                          DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id 
                          FROM	products p 
                          	INNER JOIN products_to_categories p2c 
                          		ON p.products_id = p2c.products_id
                          		AND p.products_status = 1
                          		AND p.vendu = 0
                          		AND p2c.categories_id IN (89915, 89916, 89917, 89936, 89958, 92107)
                          	INNER JOIN categories c 
                          		ON c.categories_id = p2c.categories_id
                          	LEFT JOIN categories_description AS cd 
                          		ON c.categories_id = cd.categories_id 
                          		AND cd.language_id = 4
                          	LEFT JOIN extra_field_values AS epf
                          		ON epf.value_id IN (
                          			p.extra_value_id2, p.extra_value_id3, p.extra_value_id4, p.extra_value_id5, 
                          			p.extra_value_id6, extra_value_id8 OR epf.value_id = extra_value_id9
                          		) 
                          		AND epf.languages_id = 4
                          	LEFT JOIN products_description pd 
                          		ON p.products_id = pd.products_id
                          		AND pd.language_id = 4
                          -- GROUP BY epf.epf_value ?? pourquoi ce group by
                          ORDER BY epf.sort_order, epf.epf_value
                          


                          [ed] J'ai modifié en ajoutant quelque LEFT JOIN aux endroits où on peut imaginer qu'il n'y a pas de traduction correspondant à l'id choisi. à voir. Sur extra_field_values c'est un peu étrange vu que c'est ce que tu cherches à remonter, mais pourquoi pas..

                          Tracker.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 mai 2011 à 10:24:48

                            Bonjour,

                            Si je remplace ma requête par celle que tu viens de me donner je double mon temps de réponse en sql ...

                            Cdt,
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 mai 2011 à 10:25:51

                              J'irais même jusqu'à dire que puisqu'on ne sélectionne QUE :

                              epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id

                              on pourrait virer pas mal de tables de cette requête.

                              SQL_CALC_FOUND_ROWS ne sert à rien puisqu'on n'a pas de LIMIT.

                              Le GROUP BY est effectivement douteux.

                              SELECT 
                              DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id 
                              FROM	products p 
                              	JOIN products_to_categories p2c 
                              		ON p.products_id = p2c.products_id
                              		AND p.products_status = 1
                              		AND p.vendu = 0
                              		AND p2c.categories_id IN (89915, 89916, 89917, 89936, 89958, 92107)
                              	JOIN extra_field_values AS epf
                              		ON epf.value_id IN (
                              			p.extra_value_id2, 
                              			p.extra_value_id3, 
                              			p.extra_value_id4, 
                                                      p.extra_value_id5, 
                              			p.extra_value_id6, 
                              			p.extra_value_id8, 
                              			p.extra_value_id9
                              		) 
                              		AND epf.languages_id = 4
                              ORDER BY epf.sort_order, epf.epf_value
                              

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 mai 2011 à 10:46:32

                                Citation : bart0356

                                Bonjour,

                                Si je remplace ma requête par celle que tu viens de me donner je double mon temps de réponse en sql ...


                                Tu dois avoir un problème de mesure...
                                Utilise le profiler de mysql pour avoir des infos fiables.

                                Tracker.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 mai 2011 à 23:00:19

                                  Bon, j'ai reçu ton dump SQL de tables.

                                  Effectivement le coup des colonnes extra_values_machin numérotées c'est atroce, le prestataire qui a pondu cette merde mérite le fouet, et je suppute aussi que c'est son code qui a généré cette monstruosité que tu m'as envoyé par PM :

                                  SELECT SQL_CALC_FOUND_ROWS DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id FROM products_description pd LEFT JOIN products_to_categories p2c on (pd.products_id = p2c.products_id) LEFT JOIN categories c on (c.categories_id = p2c.categories_id) LEFT JOIN extra_field_values AS epf ON (epf.value_id = extra_value_id2 or epf.value_id = extra_value_id3 or epf.value_id = extra_value_id4 or epf.value_id = extra_value_id5 or epf.value_id = extra_value_id6 or epf.value_id = extra_value_id8 or epf.value_id = extra_value_id9 ) and (epf.languages_id = "4") WHERE (p2c.categories_id = "91041" or p2c.categories_id = "93903" or p2c.categories_id = "93904" or p2c.categories_id = "93905" or p2c.categories_id = "93906" or p2c.categories_id = "93907" or p2c.categories_id = "93908" or p2c.categories_id = "91042" or p2c.categories_id = "91043" or p2c.categories_id = "91044" or p2c.categories_id = "91045" or p2c.categories_id = "91046" or p2c.categories_id = "91047" or p2c.categories_id = "91048" or p2c.categories_id = "91055" or p2c.categories_id = "91056" or p2c.categories_id = "91057" or p2c.categories_id = "91060" or p2c.categories_id = "91065" or p2c.categories_id = "91068" or p2c.categories_id = "91069" or p2c.categories_id = "91070" or p2c.categories_id = "92238" or p2c.categories_id = "92243" or p2c.categories_id = "92244" or p2c.categories_id = "91071" or p2c.categories_id = "92703" or p2c.categories_id = "91072" or p2c.categories_id = "91073" or p2c.categories_id = "91074" or p2c.categories_id = "91078" or p2c.categories_id = "91082" or p2c.categories_id = "91084" or p2c.categories_id = "91087" or p2c.categories_id = "93998" or p2c.categories_id = "93999" or p2c.categories_id = "94000" or p2c.categories_id = "94001" or p2c.categories_id = "94002" or p2c.categories_id = "94003" or p2c.categories_id = "94004" or p2c.categories_id = "94005" or p2c.categories_id = "91088" or p2c.categories_id = "91089" or p2c.categories_id = "91092" or p2c.categories_id = "91094" or p2c.categories_id = "91095" or p2c.categories_id = "91096" or p2c.categories_id = "91098" or p2c.categories_id = "91099" or p2c.categories_id = "91100" or p2c.categories_id = "91105" or p2c.categories_id = "91106" or p2c.categories_id = "91107" or p2c.categories_id = "91108" or p2c.categories_id = "91109" or p2c.categories_id = "91110" or p2c.categories_id = "91112" or p2c.categories_id = "91113" or p2c.categories_id = "91114" or p2c.categories_id = "91115" or p2c.categories_id = "91116" or p2c.categories_id = "91117" or p2c.categories_id = "91118" or p2c.categories_id = "91121" or p2c.categories_id = "91126" or p2c.categories_id = "91127" or p2c.categories_id = "91128" or p2c.categories_id = "91129" or p2c.categories_id = "91132" or p2c.categories_id = "91134" or p2c.categories_id = "91135" or p2c.categories_id = "91136" or p2c.categories_id = "91137" or p2c.categories_id = "91143" or p2c.categories_id = "91146" or p2c.categories_id = "91147" or p2c.categories_id = "91152" or p2c.categories_id = "91159" or p2c.categories_id = "91160" or p2c.categories_id = "91161" or p2c.categories_id = "91163" or p2c.categories_id = "91164" or p2c.categories_id = "91166" or p2c.categories_id = "91168" or p2c.categories_id = "91169" or p2c.categories_id = "91171" or p2c.categories_id = "91174" or p2c.categories_id = "91176" or p2c.categories_id = "91177" or p2c.categories_id = "92774" or p2c.categories_id = "92775" or p2c.categories_id = "92779" or p2c.categories_id = "92792" or p2c.categories_id = "92797" or p2c.categories_id = "92798" or p2c.categories_id = "92802" or p2c.categories_id = "92803" or p2c.categories_id = "92805" or p2c.categories_id = "92806" or p2c.categories_id = "92807" or p2c.categories_id = "92808" or p2c.categories_id = "92809" or p2c.categories_id = "92810" or p2c.categories_id = "91178" or p2c.categories_id = "91179" or p2c.categories_id = "91180" or p2c.categories_id = "91182" or p2c.categories_id = "91183" or p2c.categories_id = "91185" or p2c.categories_id = "91186" or p2c.categories_id = "92266" or p2c.categories_id = "92267" or p2c.categories_id = "92268" or p2c.categories_id = "92269" or p2c.categories_id = "92271" or p2c.categories_id = "92278" or p2c.categories_id = "92284" or p2c.categories_id = "92285" or p2c.categories_id = "92286" or p2c.categories_id = "92287" or p2c.categories_id = "92288" or p2c.categories_id = "92292" or p2c.categories_id = "92294" or p2c.categories_id = "92300" or p2c.categories_id = "91187" or p2c.categories_id = "91189" or p2c.categories_id = "91190" or p2c.categories_id = "91193" or p2c.categories_id = "91197" or p2c.categories_id = "92103" or p2c.categories_id = "92310" or p2c.categories_id = "92312" or p2c.categories_id = "92322" or p2c.categories_id = "91198" or p2c.categories_id = "91200" or p2c.categories_id = "91202" or p2c.categories_id = "91203" or p2c.categories_id = "91204" or p2c.categories_id = "91205" or p2c.categories_id = "91206" or p2c.categories_id = "91207" or p2c.categories_id = "91208" or p2c.categories_id = "91705" or p2c.categories_id = "91209" or p2c.categories_id = "91210" or p2c.categories_id = "91211" or p2c.categories_id = "91212" or p2c.categories_id = "91215" or p2c.categories_id = "92563" or p2c.categories_id = "92565" or p2c.categories_id = "92566" or p2c.categories_id = "92567" or p2c.categories_id = "91216" or p2c.categories_id = "91217" or p2c.categories_id = "91218" or p2c.categories_id = "91219" or p2c.categories_id = "92397" or p2c.categories_id = "92398" or p2c.categories_id = "92400" or p2c.categories_id = "91220" or p2c.categories_id = "93902" or p2c.categories_id = "91221" or p2c.categories_id = "91223" or p2c.categories_id = "91224" or p2c.categories_id = "91225" or p2c.categories_id = "91226" or p2c.categories_id = "91227" or p2c.categories_id = "91228" or p2c.categories_id = "93797" or p2c.categories_id = "93985" or p2c.categories_id = "93993" or p2c.categories_id = "93994" or p2c.categories_id = "93995" or p2c.categories_id = "94036" or p2c.categories_id = "94037" or p2c.categories_id = "94038" or p2c.categories_id = "91229" or p2c.categories_id = "91230" or p2c.categories_id = "91231" or p2c.categories_id = "91232" or p2c.categories_id = "91233" or p2c.categories_id = "91234" or p2c.categories_id = "91236" or p2c.categories_id = "91237" or p2c.categories_id = "91238" or p2c.categories_id = "91239" or p2c.categories_id = "91241" or p2c.categories_id = "91242" or p2c.categories_id = "91246" or p2c.categories_id = "91247" or p2c.categories_id = "91248" or p2c.categories_id = "91252" or p2c.categories_id = "91253" or p2c.categories_id = "91254" or p2c.categories_id = "91255" or p2c.categories_id = "91256" or p2c.categories_id = "91260" or p2c.categories_id = "91262" or p2c.categories_id = "91263" or p2c.categories_id = "92621" or p2c.categories_id = "92622" or p2c.categories_id = "92623" or p2c.categories_id = "92625" or p2c.categories_id = "92626" or p2c.categories_id = "92631" or p2c.categories_id = "92632" or p2c.categories_id = "92633" or p2c.categories_id = "92634" or p2c.categories_id = "92635" or p2c.categories_id = "91265" or p2c.categories_id = "92706" or p2c.categories_id = "91266" or p2c.categories_id = "92404" or p2c.categories_id = "92407" or p2c.categories_id = "92408" or p2c.categories_id = "91267" or p2c.categories_id = "91268" or p2c.categories_id = "91271" or p2c.categories_id = "92105" or p2c.categories_id = "92825" or p2c.categories_id = "92834" or p2c.categories_id = "92835" or p2c.categories_id = "92836" or p2c.categories_id = "92839" or p2c.categories_id = "92840" or p2c.categories_id = "92844" or p2c.categories_id = "92849" or p2c.categories_id = "92855" or p2c.categories_id = "92856" or p2c.categories_id = "92859" or p2c.categories_id = "91274" or p2c.categories_id = "91275" or p2c.categories_id = "91276" or p2c.categories_id = "91277" or p2c.categories_id = "91278" or p2c.categories_id = "91279" or p2c.categories_id = "91280" or p2c.categories_id = "91282" or p2c.categories_id = "91283" or p2c.categories_id = "91284" or p2c.categories_id = "91285" or p2c.categories_id = "93234" or p2c.categories_id = "93235" or p2c.categories_id = "93236" or p2c.categories_id = "93237" or p2c.categories_id = "91286" or p2c.categories_id = "92865" or p2c.categories_id = "92866" or p2c.categories_id = "92867" or p2c.categories_id = "92869" or p2c.categories_id = "92870" or p2c.categories_id = "92873" or p2c.categories_id = "92875" or p2c.categories_id = "92882" or p2c.categories_id = "92889" or p2c.categories_id = "91538" or p2c.categories_id = "91539" or p2c.categories_id = "91540" or p2c.categories_id = "91541" or p2c.categories_id = "91542" or p2c.categories_id = "92249" or p2c.categories_id = "92252" or p2c.categories_id = "92253" or p2c.categories_id = "92254" or p2c.categories_id = "92255" or p2c.categories_id = "92257" or p2c.categories_id = "92258" or p2c.categories_id = "92263" or p2c.categories_id = "92264" or p2c.categories_id = "92265" or p2c.categories_id = "91545" or p2c.categories_id = "92893" or p2c.categories_id = "92895" or p2c.categories_id = "92897" or p2c.categories_id = "92899" or p2c.categories_id = "92901" or p2c.categories_id = "92902" or p2c.categories_id = "92905" or p2c.categories_id = "92906" or p2c.categories_id = "92909" or p2c.categories_id = "92910" or p2c.categories_id = "92911" or p2c.categories_id = "92912" or p2c.categories_id = "92913" or p2c.categories_id = "92914" or p2c.categories_id = "92915" or p2c.categories_id = "92916" or p2c.categories_id = "92917" or p2c.categories_id = "92918" or p2c.categories_id = "92920" or p2c.categories_id = "92922" or p2c.categories_id = "92923" or p2c.categories_id = "92924" or p2c.categories_id = "92925" or p2c.categories_id = "92926" or p2c.categories_id = "92940" or p2c.categories_id = "91547" or p2c.categories_id = "92944" or p2c.categories_id = "92946" or p2c.categories_id = "92947" or p2c.categories_id = "91549" or p2c.categories_id = "91550" or p2c.categories_id = "91551" or p2c.categories_id = "91552" or p2c.categories_id = "91553" or p2c.categories_id = "91554" or p2c.categories_id = "91555" or p2c.categories_id = "91557" or p2c.categories_id = "91558" or p2c.categories_id = "91559" or p2c.categories_id = "91561" or p2c.categories_id = "91562" or p2c.categories_id = "91563" or p2c.categories_id = "91564" or p2c.categories_id = "91565" or p2c.categories_id = "91566" or p2c.categories_id = "91567" or p2c.categories_id = "91568" or p2c.categories_id = "91569" or p2c.categories_id = "91570" or p2c.categories_id = "91571" or p2c.categories_id = "91572" or p2c.categories_id = "91573" or p2c.categories_id = "91574" or p2c.categories_id = "93812" or p2c.categories_id = "91575" or p2c.categories_id = "91576" or p2c.categories_id = "91577" or p2c.categories_id = "92677" or p2c.categories_id = "92679" or p2c.categories_id = "92680" or p2c.categories_id = "91578" or p2c.categories_id = "91580" or p2c.categories_id = "91581" or p2c.categories_id = "91582" or p2c.categories_id = "91583" or p2c.categories_id = "91585" or p2c.categories_id = "91587" or p2c.categories_id = "93005" or p2c.categories_id = "93006" or p2c.categories_id = "93008" or p2c.categories_id = "93009" or p2c.categories_id = "93010" or p2c.categories_id = "91593" or p2c.categories_id = "91595" or p2c.categories_id = "93015" or p2c.categories_id = "93020" or p2c.categories_id = "93022" or p2c.categories_id = "93023" or p2c.categories_id = "93026" or p2c.categories_id = "93034" or p2c.categories_id = "93035" or p2c.categories_id = "93041" or p2c.categories_id = "93042" or p2c.categories_id = "93044" or p2c.categories_id = "93046" or p2c.categories_id = "93048" or p2c.categories_id = "91596" or p2c.categories_id = "91597" or p2c.categories_id = "92687" or p2c.categories_id = "92688" or p2c.categories_id = "92689" or p2c.categories_id = "92690" or p2c.categories_id = "92691" or p2c.categories_id = "92692" or p2c.categories_id = "92693" or p2c.categories_id = "91598" or p2c.categories_id = "93049" or p2c.categories_id = "93051" or p2c.categories_id = "91602" or p2c.categories_id = "91603" or p2c.categories_id = "91604" or p2c.categories_id = "91605" or p2c.categories_id = "91606" or p2c.categories_id = "91607" or p2c.categories_id = "91608" or p2c.categories_id = "91609" or p2c.categories_id = "91610" or p2c.categories_id = "91611" or p2c.categories_id = "91612" or p2c.categories_id = "91613" or p2c.categories_id = "91614" or p2c.categories_id = "91615" or p2c.categories_id = "91616" or p2c.categories_id = "91617" or p2c.categories_id = "91618" or p2c.categories_id = "91619" or p2c.categories_id = "91620" or p2c.categories_id = "91621" or p2c.categories_id = "91622" or p2c.categories_id = "91623" or p2c.categories_id = "91624" or p2c.categories_id = "91625" or p2c.categories_id = "91626" or p2c.categories_id = "91627" or p2c.categories_id = "91628" or p2c.categories_id = "91629" or p2c.categories_id = "91631" or p2c.categories_id = "91632" or p2c.categories_id = "91633" or p2c.categories_id = "91634" or p2c.categories_id = "91635" or p2c.categories_id = "91636" or p2c.categories_id = "91638" or p2c.categories_id = "91639" or p2c.categories_id = "91640" or p2c.categories_id = "91641" or p2c.categories_id = "93059" or p2c.categories_id = "93060" or p2c.categories_id = "93061" or p2c.categories_id = "93062" or p2c.categories_id = "91642" or p2c.categories_id = "91643" or p2c.categories_id = "91644" or p2c.categories_id = "93840" or p2c.categories_id = "93839" or p2c.categories_id = "93838" or p2c.categories_id = "93837" or p2c.categories_id = "93836" or p2c.categories_id = "93842" or p2c.categories_id = "93841" or p2c.categories_id = "91645" or p2c.categories_id = "91646" or p2c.categories_id = "91647" or p2c.categories_id = "91648" or p2c.categories_id = "91649" or p2c.categories_id = "91650" or p2c.categories_id = "91652" or p2c.categories_id = "91654" or p2c.categories_id = "91655" or p2c.categories_id = "91656" or p2c.categories_id = "91664" or p2c.categories_id = "91670" or p2c.categories_id = "93065" or p2c.categories_id = "93066" or p2c.categories_id = "93067" or p2c.categories_id = "91671" or p2c.categories_id = "91672" or p2c.categories_id = "91673" or p2c.categories_id = "91674" or p2c.categories_id = "93860" or p2c.categories_id = "93856" or p2c.categories_id = "93859" or p2c.categories_id = "93858" or p2c.categories_id = "93857" or p2c.categories_id = "93855" or p2c.categories_id = "93854" or p2c.categories_id = "91675" or p2c.categories_id = "91676" or p2c.categories_id = "91677" or p2c.categories_id = "91678" or p2c.categories_id = "91679" or p2c.categories_id = "91680" or p2c.categories_id = "91681" or p2c.categories_id = "91682" or p2c.categories_id = "91683" or p2c.categories_id = "91684" or p2c.categories_id = "91685" or p2c.categories_id = "93079" or p2c.categories_id = "93080" or p2c.categories_id = "93085" or p2c.categories_id = "93086" or p2c.categories_id = "93087" or p2c.categories_id = "93088" or p2c.categories_id = "93089" or p2c.categories_id = "93091" or p2c.categories_id = "93092" or p2c.categories_id = "93093" or p2c.categories_id = "93094" or p2c.categories_id = "93095" or p2c.categories_id = "93096" or p2c.categories_id = "93097" or p2c.categories_id = "93098" or p2c.categories_id = "91687" or p2c.categories_id = "91688" or p2c.categories_id = "91689" or p2c.categories_id = "91690" or p2c.categories_id = "91691" or p2c.categories_id = "91692" or p2c.categories_id = "91693" or p2c.categories_id = "91697" or p2c.categories_id = "91699" or p2c.categories_id = "91700" or p2c.categories_id = "91707" or p2c.categories_id = "91708" or p2c.categories_id = "91709" or p2c.categories_id = "91710" or p2c.categories_id = "91711" or p2c.categories_id = "93873" or p2c.categories_id = "93871" or p2c.categories_id = "93872" or p2c.categories_id = "93869" or p2c.categories_id = "93867" or p2c.categories_id = "93870" or p2c.categories_id = "93868" or p2c.categories_id = "91712" or p2c.categories_id = "91713" or p2c.categories_id = "91715" or p2c.categories_id = "93127" or p2c.categories_id = "93129" or p2c.categories_id = "93132" or p2c.categories_id = "91716" or p2c.categories_id = "91717" or p2c.categories_id = "91723" or p2c.categories_id = "91724" or p2c.categories_id = "91725" or p2c.categories_id = "91726" or p2c.categories_id = "91727" or p2c.categories_id = "91729" or p2c.categories_id = "91731" or p2c.categories_id = "91733" or p2c.categories_id = "91734" or p2c.categories_id = "91736" or p2c.categories_id = "91737" or p2c.categories_id = "91738" or p2c.categories_id = "91739" or p2c.categories_id = "91740" or p2c.categories_id = "91748" or p2c.categories_id = "91776" or p2c.categories_id = "92409" or p2c.categories_id = "92410" or p2c.categories_id = "92412" or p2c.categories_id = "92413" or p2c.categories_id = "92414" or p2c.categories_id = "92415" or p2c.categories_id = "92416" or p2c.categories_id = "92420" or p2c.categories_id = "92422" or p2c.categories_id = "92423" or p2c.categories_id = "92434" or p2c.categories_id = "92437" or p2c.categories_id = "92439" or p2c.categories_id = "92440" or p2c.categories_id = "92441" or p2c.categories_id = "92442" or p2c.categories_id = "92443" or p2c.categories_id = "92444" or p2c.categories_id = "91777" or p2c.categories_id = "91778" or p2c.categories_id = "92448" or p2c.categories_id = "92452" or p2c.categories_id = "92455" or p2c.categories_id = "92458" or p2c.categories_id = "92459" or p2c.categories_id = "92460" or p2c.categories_id = "92465" or p2c.categories_id = "91779" or p2c.categories_id = "91784" or p2c.categories_id = "92468" or p2c.categories_id = "92469" or p2c.categories_id = "92470" or p2c.categories_id = "92472" or p2c.categories_id = "92473" or p2c.categories_id = "92474" or p2c.categories_id = "92475" or p2c.categories_id = "92476" or p2c.categories_id = "92479" or p2c.categories_id = "92481" or p2c.categories_id = "92483" or p2c.categories_id = "92484" or p2c.categories_id = "92487" or p2c.categories_id = "92491" or p2c.categories_id = "92496" or p2c.categories_id = "92499" or p2c.categories_id = "92505" or p2c.categories_id = "93843" or p2c.categories_id = "93845" or p2c.categories_id = "93844" or p2c.categories_id = "93848" or p2c.categories_id = "93847" or p2c.categories_id = "93849" or p2c.categories_id = "93846" or p2c.categories_id = "91786" or p2c.categories_id = "91787" or p2c.categories_id = "91788" or p2c.categories_id = "91789" or p2c.categories_id = "91790" or p2c.categories_id = "91791" or p2c.categories_id = "91792" or p2c.categories_id = "91793" or p2c.categories_id = "91795" or p2c.categories_id = "91796" or p2c.categories_id = "91797" or p2c.categories_id = "91798" or p2c.categories_id = "91799" or p2c.categories_id = "91800" or p2c.categories_id = "91801" or p2c.categories_id = "91806" or p2c.categories_id = "91807" or p2c.categories_id = "91814" or p2c.categories_id = "91817" or p2c.categories_id = "92508" or p2c.categories_id = "92509" or p2c.categories_id = "92512" or p2c.categories_id = "93821" or p2c.categories_id = "93822" or p2c.categories_id = "93824" or p2c.categories_id = "93823" or p2c.categories_id = "93825" or p2c.categories_id = "91819" or p2c.categories_id = "91820" or p2c.categories_id = "91821" or p2c.categories_id = "91823" or p2c.categories_id = "91824" or p2c.categories_id = "91827" or p2c.categories_id = "93814" or p2c.categories_id = "93816" or p2c.categories_id = "93815" or p2c.categories_id = "93820" or p2c.categories_id = "93819" or p2c.categories_id = "93818" or p2c.categories_id = "93817" or p2c.categories_id = "91835" or p2c.categories_id = "91836" or p2c.categories_id = "91837" or p2c.categories_id = "92519" or p2c.categories_id = "92520" or p2c.categories_id = "92521" or p2c.categories_id = "92522" or p2c.categories_id = "92523" or p2c.categories_id = "92532" or p2c.categories_id = "92534" or p2c.categories_id = "92536" or p2c.categories_id = "92537" or p2c.categories_id = "93784" or p2c.categories_id = "93787" or p2c.categories_id = "93786" or p2c.categories_id = "93785" or p2c.categories_id = "91839" or p2c.categories_id = "91840" or p2c.categories_id = "91842" or p2c.categories_id = "91843" or p2c.categories_id = "91844" or p2c.categories_id = "91846" or p2c.categories_id = "91847" or p2c.categories_id = "92549" or p2c.categories_id = "92551" or p2c.categories_id = "91848" or p2c.categories_id = "91849" or p2c.categories_id = "91851" or p2c.categories_id = "91856" or p2c.categories_id = "91857" or p2c.categories_id = "93980" or p2c.categories_id = "93981" or p2c.categories_id = "93982" or p2c.categories_id = "93983" or p2c.categories_id = "93984" or p2c.categories_id = "94006" or p2c.categories_id = "93798" or p2c.categories_id = "93799" or p2c.categories_id = "93804" or p2c.categories_id = "93803" or p2c.categories_id = "93802" or p2c.categories_id = "93801" or p2c.categories_id = "93800" or p2c.categories_id = "91860" or p2c.categories_id = "91861" or p2c.categories_id = "91862" or p2c.categories_id = "91863" or p2c.categories_id = "91864" or p2c.categories_id = "91865" or p2c.categories_id = "91866" or p2c.categories_id = "91867" or p2c.categories_id = "91871" or p2c.categories_id = "91872" or p2c.categories_id = "91873" or p2c.categories_id = "91876" or p2c.categories_id = "91877" or p2c.categories_id = "91878" or p2c.categories_id = "91879" or p2c.categories_id = "91880" or p2c.categories_id = "91881" or p2c.categories_id = "91882" or p2c.categories_id = "91883" or p2c.categories_id = "91884" or p2c.categories_id = "91885" or p2c.categories_id = "91886" or p2c.categories_id = "91887" or p2c.categories_id = "91888" or p2c.categories_id = "91889" or p2c.categories_id = "91890" or p2c.categories_id = "91891" or p2c.categories_id = "91892" or p2c.categories_id = "91893" or p2c.categories_id = "91894" or p2c.categories_id = "91895" or p2c.categories_id = "91896" or p2c.categories_id = "91897" or p2c.categories_id = "91898" or p2c.categories_id = "91899" or p2c.categories_id = "91900" or p2c.categories_id = "91901" or p2c.categories_id = "91902" or p2c.categories_id = "91903" or p2c.categories_id = "91904" or p2c.categories_id = "91905" or p2c.categories_id = "91906" or p2c.categories_id = "91907" or p2c.categories_id = "91908" or p2c.categories_id = "91909" or p2c.categories_id = "93986" or p2c.categories_id = "93987" or p2c.categories_id = "93988" or p2c.categories_id = "93989" or p2c.categories_id = "93990" or p2c.categories_id = "93991" or p2c.categories_id = "93992" or p2c.categories_id = "91910" or p2c.categories_id = "91911" or p2c.categories_id = "94028" or p2c.categories_id = "94029" or p2c.categories_id = "94030" or p2c.categories_id = "94031" or p2c.categories_id = "94032" or p2c.categories_id = "94033" or p2c.categories_id = "94034" or p2c.categories_id = "94035" or p2c.categories_id = "92114" or p2c.categories_id = "92115" or p2c.categories_id = "92116" or p2c.categories_id = "92117" or p2c.categories_id = "92118" or p2c.categories_id = "92119" or p2c.categories_id = "92120" or p2c.categories_id = "92123" or p2c.categories_id = "92124" or p2c.categories_id = "92126" or p2c.categories_id = "92130" or p2c.categories_id = "92132" or p2c.categories_id = "92135" or p2c.categories_id = "92136" or p2c.categories_id = "92137" or p2c.categories_id = "92138" or p2c.categories_id = "92139" or p2c.categories_id = "92140" or p2c.categories_id = "92141" or p2c.categories_id = "92142" or p2c.categories_id = "92143" or p2c.categories_id = "92144" or p2c.categories_id = "92147" or p2c.categories_id = "92148" or p2c.categories_id = "92149" or p2c.categories_id = "92150" or p2c.categories_id = "92151" or p2c.categories_id = "92152" or p2c.categories_id = "92153" or p2c.categories_id = "92154" or p2c.categories_id = "92157" or p2c.categories_id = "92158" or p2c.categories_id = "92159" or p2c.categories_id = "92160" or p2c.categories_id = "92161" or p2c.categories_id = "92162" or p2c.categories_id = "92163" or p2c.categories_id = "92164" or p2c.categories_id = "92165" or p2c.categories_id = "92170" or p2c.categories_id = "92171" or p2c.categories_id = "93768" or p2c.categories_id = "93773" or p2c.categories_id = "93772" or p2c.categories_id = "93771" or p2c.categories_id = "93769" or p2c.categories_id = "93770" or p2c.categories_id = "93775" or p2c.categories_id = "93776" or p2c.categories_id = "93774" or p2c.categories_id = "92176" or p2c.categories_id = "92177" or p2c.categories_id = "92178" or p2c.categories_id = "92179" or p2c.categories_id = "92181" or p2c.categories_id = "92182" or p2c.categories_id = "92183" or p2c.categories_id = "92184" or p2c.categories_id = "92185" or p2c.categories_id = "92186" or p2c.categories_id = "92187" or p2c.categories_id = "92188" or p2c.categories_id = "92189" or p2c.categories_id = "92190" or p2c.categories_id = "92191" or p2c.categories_id = "92192" or p2c.categories_id = "92193" or p2c.categories_id = "92194" or p2c.categories_id = "92195" or p2c.categories_id = "92196" or p2c.categories_id = "92198" or p2c.categories_id = "92199" or p2c.categories_id = "92200" or p2c.categories_id = "92201" or p2c.categories_id = "92202" or p2c.categories_id = "92203" or p2c.categories_id = "92204" or p2c.categories_id = "92205" or p2c.categories_id = "92206" or p2c.categories_id = "92207" or p2c.categories_id = "92208" or p2c.categories_id = "92209" or p2c.categories_id = "92211" or p2c.categories_id = "92212" or p2c.categories_id = "92213" or p2c.categories_id = "92215" or p2c.categories_id = "92217" or p2c.categories_id = "92219" or p2c.categories_id = "92222" or p2c.categories_id = "92224" or p2c.categories_id = "92225" or p2c.categories_id = "92226" or p2c.categories_id = "92227" or p2c.categories_id = "92228" or p2c.categories_id = "92229" or p2c.categories_id = "92231" or p2c.categories_id = "92232" or p2c.categories_id = "92326" or p2c.categories_id = "92328" or p2c.categories_id = "92330" or p2c.categories_id = "92331" or p2c.categories_id = "92332" or p2c.categories_id = "92333" or p2c.categories_id = "92334" or p2c.categories_id = "92335" or p2c.categories_id = "92336" or p2c.categories_id = "92337" or p2c.categories_id = "92338" or p2c.categories_id = "92339" or p2c.categories_id = "92340" or p2c.categories_id = "92341" or p2c.categories_id = "92342" or p2c.categories_id = "92343" or p2c.categories_id = "92344" or p2c.categories_id = "92345" or p2c.categories_id = "92346" or p2c.categories_id = "92347" or p2c.categories_id = "92348" or p2c.categories_id = "92349" or p2c.categories_id = "92351" or p2c.categories_id = "92353" or p2c.categories_id = "92355" or p2c.categories_id = "92357" or p2c.categories_id = "92358" or p2c.categories_id = "92359" or p2c.categories_id = "92360" or p2c.categories_id = "92361" or p2c.categories_id = "92362" or p2c.categories_id = "92363" or p2c.categories_id = "92323" or p2c.categories_id = "92366" or p2c.categories_id = "92367" or p2c.categories_id = "92368" or p2c.categories_id = "92370" or p2c.categories_id = "92374" or p2c.categories_id = "92376" or p2c.categories_id = "92377" or p2c.categories_id = "92379" or p2c.categories_id = "92380" or p2c.categories_id = "92381" or p2c.categories_id = "92382" or p2c.categories_id = "92385" or p2c.categories_id = "92391" or p2c.categories_id = "92392" or p2c.categories_id = "92393" or p2c.categories_id = "93874" or p2c.categories_id = "93876" or p2c.categories_id = "93875" or p2c.categories_id = "93877" or p2c.categories_id = "93879" or p2c.categories_id = "93878" or p2c.categories_id = "93861" or p2c.categories_id = "93862" or p2c.categories_id = "93865" or p2c.categories_id = "93864" or p2c.categories_id = "93863" or p2c.categories_id = "93866" or p2c.categories_id = "93850" or p2c.categories_id = "93851" or p2c.categories_id = "93853" or p2c.categories_id = "93852" or p2c.categories_id = "93826" or p2c.categories_id = "93828" or p2c.categories_id = "93832" or p2c.categories_id = "93830" or p2c.categories_id = "93831" or p2c.categories_id = "93829" or p2c.categories_id = "93827" or p2c.categories_id = "93835" or p2c.categories_id = "93834" or p2c.categories_id = "93833" or p2c.categories_id = "93788" or p2c.categories_id = "93790" or p2c.categories_id = "93789" or p2c.categories_id = "93779" or p2c.categories_id = "93781" or p2c.categories_id = "93780" or p2c.categories_id = "93783" or p2c.categories_id = "93782" or p2c.categories_id = "93791" or p2c.categories_id = "93792" or p2c.categories_id = "93793" or p2c.categories_id = "93777" or p2c.categories_id = "93778" or p2c.categories_id = "92552" or p2c.categories_id = "92553" or p2c.categories_id = "92558" or p2c.categories_id = "92559" or p2c.categories_id = "92560" or p2c.categories_id = "92561" or p2c.categories_id = "92568" or p2c.categories_id = "92569" or p2c.categories_id = "92570" or p2c.categories_id = "92571" or p2c.categories_id = "92572" or p2c.categories_id = "92573" or p2c.categories_id = "92574" or p2c.categories_id = "92575" or p2c.categories_id = "92576" or p2c.categories_id = "92578" or p2c.categories_id = "92579" or p2c.categories_id = "92580" or p2c.categories_id = "92581" or p2c.categories_id = "92582" or p2c.categories_id = "92583" or p2c.categories_id = "92584" or p2c.categories_id = "92585" or p2c.categories_id = "92587" or p2c.categories_id = "92588" or p2c.categories_id = "92589" or p2c.categories_id = "92590" or p2c.categories_id = "92591" or p2c.categories_id = "92592" or p2c.categories_id = "92596" or p2c.categories_id = "92597" or p2c.categories_id = "92599" or p2c.categories_id = "92600" or p2c.categories_id = "92602" or p2c.categories_id = "92603" or p2c.categories_id = "92604" or p2c.categories_id = "92605" or p2c.categories_id = "92607" or p2c.categories_id = "92608" or p2c.categories_id = "92609" or p2c.categories_id = "92610" or p2c.categories_id = "92611" or p2c.categories_id = "92612" or p2c.categories_id = "92613" or p2c.categories_id = "92614" or p2c.categories_id = "92615" or p2c.categories_id = "92616" or p2c.categories_id = "92617" or p2c.categories_id = "92618" or p2c.categories_id = "92619" or p2c.categories_id = "92638" or p2c.categories_id = "92639" or p2c.categories_id = "92640" or p2c.categories_id = "92641" or p2c.categories_id = "92642" or p2c.categories_id = "92643" or p2c.categories_id = "92645" or p2c.categories_id = "92646" or p2c.categories_id = "92647" or p2c.categories_id = "92648" or p2c.categories_id = "92649" or p2c.categories_id = "92650" or p2c.categories_id = "92651" or p2c.categories_id = "92652" or p2c.categories_id = "92653" or p2c.categories_id = "92654" or p2c.categories_id = "92655" or p2c.categories_id = "92656" or p2c.categories_id = "92657" or p2c.categories_id = "92658" or p2c.categories_id = "92659" or p2c.categories_id = "92660" or p2c.categories_id = "92661" or p2c.categories_id = "92662" or p2c.categories_id = "92663" or p2c.categories_id = "92664" or p2c.categories_id = "92665" or p2c.categories_id = "92666" or p2c.categories_id = "92667" or p2c.categories_id = "92668" or p2c.categories_id = "92669" or p2c.categories_id = "92670" or p2c.categories_id = "92671" or p2c.categories_id = "92672" or p2c.categories_id = "92681" or p2c.categories_id = "92682" or p2c.categories_id = "92683" or p2c.categories_id = "92684" or p2c.categories_id = "92685" or p2c.categories_id = "92686" or p2c.categories_id = "92817" or p2c.categories_id = "92818" or p2c.categories_id = "92819" or p2c.categories_id = "92821" or p2c.categories_id = "92860" or p2c.categories_id = "92861" or p2c.categories_id = "92863" or p2c.categories_id = "92864" or p2c.categories_id = "92941" or p2c.categories_id = "92942" or p2c.categories_id = "92948" or p2c.categories_id = "92949" or p2c.categories_id = "92950" or p2c.categories_id = "92951" or p2c.categories_id = "92952" or p2c.categories_id = "92953" or p2c.categories_id = "92959" or p2c.categories_id = "92961" or p2c.categories_id = "92962" or p2c.categories_id = "92964" or p2c.categories_id = "92965" or p2c.categories_id = "92966" or p2c.categories_id = "92967" or p2c.categories_id = "92968" or p2c.categories_id = "92969" or p2c.categories_id = "92970" or p2c.categories_id = "92971" or p2c.categories_id = "92972" or p2c.categories_id = "92973" or p2c.categories_id = "92975" or p2c.categories_id = "92976" or p2c.categories_id = "92977" or p2c.categories_id = "92978" or p2c.categories_id = "92979" or p2c.categories_id = "92980" or p2c.categories_id = "92981" or p2c.categories_id = "92982" or p2c.categories_id = "92983" or p2c.categories_id = "92984" or p2c.categories_id = "92985" or p2c.categories_id = "92986" or p2c.categories_id = "92989" or p2c.categories_id = "92991" or p2c.categories_id = "92992" or p2c.categories_id = "92994" or p2c.categories_id = "92995" or p2c.categories_id = "92996" or p2c.categories_id = "92997" or p2c.categories_id = "92998" or p2c.categories_id = "92999" or p2c.categories_id = "93000" or p2c.categories_id = "93002" or p2c.categories_id = "93054" or p2c.categories_id = "93055" or p2c.categories_id = "93056" or p2c.categories_id = "93057" or p2c.categories_id = "93069" or p2c.categories_id = "93070" or p2c.categories_id = "93071" or p2c.categories_id = "93101" or p2c.categories_id = "93102" or p2c.categories_id = "93103" or p2c.categories_id = "93105" or p2c.categories_id = "93106" or p2c.categories_id = "93108" or p2c.categories_id = "93109" or p2c.categories_id = "93110" or p2c.categories_id = "93111" or p2c.categories_id = "93112" or p2c.categories_id = "93113" or p2c.categories_id = "93114" or p2c.categories_id = "93115" or p2c.categories_id = "93116" or p2c.categories_id = "93117" or p2c.categories_id = "93118" or p2c.categories_id = "93119" or p2c.categories_id = "93120" or p2c.categories_id = "93121" or p2c.categories_id = "93122" or p2c.categories_id = "93123" or p2c.categories_id = "93125" or p2c.categories_id = "93133" or p2c.categories_id = "93134" or p2c.categories_id = "93135" or p2c.categories_id = "93136" or p2c.categories_id = "93137" or p2c.categories_id = "93138" or p2c.categories_id = "93139" or p2c.categories_id = "93140" or p2c.categories_id = "93141" or p2c.categories_id = "93142" or p2c.categories_id = "93143" or p2c.categories_id = "93144" or p2c.categories_id = "91719" or p2c.categories_id = "91720" or p2c.categories_id = "91721" or p2c.categories_id = "93145" or p2c.categories_id = "93146" or p2c.categories_id = "93148" or p2c.categories_id = "93156" or p2c.categories_id = "93157" or p2c.categories_id = "93158" or p2c.categories_id = "93161" or p2c.categories_id = "93162" or p2c.categories_id = "93164" or p2c.categories_id = "93165" or p2c.categories_id = "93166" or p2c.categories_id = "93167" or p2c.categories_id = "93168" or p2c.categories_id = "93169" or p2c.categories_id = "93170" or p2c.categories_id = "93171" or p2c.categories_id = "93172" or p2c.categories_id = "93173" or p2c.categories_id = "93174" or p2c.categories_id = "93175" or p2c.categories_id = "93176" or p2c.categories_id = "93177" or p2c.categories_id = "93178" or p2c.categories_id = "93179" or p2c.categories_id = "93181" or p2c.categories_id = "93183" or p2c.categories_id = "93184" or p2c.categories_id = "93185" or p2c.categories_id = "93186" or p2c.categories_id = "93187" or p2c.categories_id = "93188" or p2c.categories_id = "93191" or p2c.categories_id = "93194" or p2c.categories_id = "93195" or p2c.categories_id = "93196" or p2c.categories_id = "93199" or p2c.categories_id = "93208" or p2c.categories_id = "93809" or p2c.categories_id = "93811" or p2c.categories_id = "93810" or p2c.categories_id = "93805" or p2c.categories_id = "93807" or p2c.categories_id = "93808" or p2c.categories_id = "93806" or p2c.categories_id = "93209" or p2c.categories_id = "93210" or p2c.categories_id = "93212" or p2c.categories_id = "93213" or p2c.categories_id = "93214" or p2c.categories_id = "93215" or p2c.categories_id = "93216" or p2c.categories_id = "93217" or p2c.categories_id = "93218" or p2c.categories_id = "93219" or p2c.categories_id = "93220" or p2c.categories_id = "93221" or p2c.categories_id = "93222" or p2c.categories_id = "93223" or p2c.categories_id = "93224" or p2c.categories_id = "93225" or p2c.categories_id = "93226" or p2c.categories_id = "93227" or p2c.categories_id = "93228" or p2c.categories_id = "93229" or p2c.categories_id = "93230" or p2c.categories_id = "93794" or p2c.categories_id = "93796" or p2c.categories_id = "93795" or p2c.categories_id = "93238" or p2c.categories_id = "93239" or p2c.categories_id = "93240" or p2c.categories_id = "93241" or p2c.categories_id = "93242" or p2c.categories_id = "93244" or p2c.categories_id = "93245" or p2c.categories_id = "93246" or p2c.categories_id = "93247" or p2c.categories_id = "93909" or p2c.categories_id = "93910" or p2c.categories_id = "93911" or p2c.categories_id = "93912" or p2c.categories_id = "93913" or p2c.categories_id = "93914" or p2c.categories_id = "93915" or p2c.categories_id = "93916" or p2c.categories_id = "93917" or p2c.categories_id = "93918" or p2c.categories_id = "93919" or p2c.categories_id = "93920" or p2c.categories_id = "93921" or p2c.categories_id = "93922" or p2c.categories_id = "93923" or p2c.categories_id = "93924" or p2c.categories_id = "93925" or p2c.categories_id = "93926" or p2c.categories_id = "93927" or p2c.categories_id = "93928" or p2c.categories_id = "93929" or p2c.categories_id = "93930" or p2c.categories_id = "93931" or p2c.categories_id = "93932" or p2c.categories_id = "93933" or p2c.categories_id = "93934" or p2c.categories_id = "93935" or p2c.categories_id = "93936" or p2c.categories_id = "93937" or p2c.categories_id = "93938" or p2c.categories_id = "93939" or p2c.categories_id = "93940" or p2c.categories_id = "93941" or p2c.categories_id = "93942" or p2c.categories_id = "93943" or p2c.categories_id = "93944" or p2c.categories_id = "93945" or p2c.categories_id = "93946" or p2c.categories_id = "93947" or p2c.categories_id = "93948" or p2c.categories_id = "93949" or p2c.categories_id = "93950" or p2c.categories_id = "93951" or p2c.categories_id = "93952" or p2c.categories_id = "93953" or p2c.categories_id = "93954" or p2c.categories_id = "93955" or p2c.categories_id = "93956" or p2c.categories_id = "93957" or p2c.categories_id = "93958" or p2c.categories_id = "93959" or p2c.categories_id = "93960" or p2c.categories_id = "93961" or p2c.categories_id = "93962" or p2c.categories_id = "93963" or p2c.categories_id = "93964" or p2c.categories_id = "93965" or p2c.categories_id = "93966" or p2c.categories_id = "93967" or p2c.categories_id = "93968" or p2c.categories_id = "93969" or p2c.categories_id = "93970" or p2c.categories_id = "93971" or p2c.categories_id = "93972" or p2c.categories_id = "93973" or p2c.categories_id = "93974" or p2c.categories_id = "93975" or p2c.categories_id = "93976" or p2c.categories_id = "93977" or p2c.categories_id = "93978" or p2c.categories_id = "93979" or p2c.categories_id = "93996" or p2c.categories_id = "93997" or p2c.categories_id = "94007" or p2c.categories_id = "94008" or p2c.categories_id = "94009" or p2c.categories_id = "94010" or p2c.categories_id = "94011" or p2c.categories_id = "94012" or p2c.categories_id = "94013" or p2c.categories_id = "94014" or p2c.categories_id = "94015" or p2c.categories_id = "94016" or p2c.categories_id = "94017" or p2c.categories_id = "94018" or p2c.categories_id = "94019" or p2c.categories_id = "94020" or p2c.categories_id = "94021" or p2c.categories_id = "94022" or p2c.categories_id = "94023" or p2c.categories_id = "94024" or p2c.categories_id = "94025" or p2c.categories_id = "94026" or p2c.categories_id = "94027") AND pd.language_id = "4" GROUP BY epf.epf_value ORDER BY epf.sort_order, epf.epf_value


                                  C'est quoi qui peut pondre une requête pareille ? OMG. En plus pour sortir ça, il a dû falloir déjà faire pas mal de requêtes pour sortir ces 1259 ids de catégorie...

                                  En bas de tes pages il y a ça :

                                  Current Parse Time: 1.116 s with 7927 queries
                                  Current Parse Time: 1.101 s with 7691 queries
                                  Current Parse Time: 1.076 s with 7463 queries

                                  7463 requêtes !!!! Pour afficher une page de produit !!!!

                                  Je crois que je commence à comprendre d'où viennent tous ces ids de catégorie...

                                  Bon en plus pour une fois sur le SdZ ton site n'est pas un mmorpg à la con ou un site de ddl, mais un vrai site sérieux (inventaire impressionnant d'ailleurs). Donc je suis peiné...

                                  Honnêtement, si c'est ton "prestataire" qui a fait ça, donne des noms.

                                  > Tu dois avoir un problème de mesure...
                                  > Utilise le profiler de mysql pour avoir des infos fiables.

                                  C'est la liste interminable de catégories qui met la zone, si on la vire la requête prend 0.6s (toujours excessivement lent mais quand même 60x moins !)... avec un IN() c'est pareil (pardon je me croyais sous postgres, lol).
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 mai 2011 à 10:27:58

                                    BOnjour,

                                    Alors oui c'est un prestataire (codeur.com) qui est à l'origine de cette requête et l'ajout de données dans notre site grossit de jour en jour cette requête (au début c'était a peu prés correct), d'où ma volonté de trouver une solution pour pallier au problème avant l'ajout de données.

                                    Voici ce que j'ai essayé :

                                    Dans PRODUCTS_TO_CATEGORIES :

                                    j'ai ajouté 3 champs

                                    n1,n2,n3

                                    Je stock donc la valeur de la catégorie mère pour m'éviter les horribles or p2c.categories = démultiplié, du coup la même requête que tu as cité la haut pour les billets devient :

                                    SELECT DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id FROM products p LEFT JOIN products_description pd on (p.products_id = pd.products_id) LEFT JOIN products_to_categories p2c on (p.products_id = p2c.products_id) LEFT JOIN extra_field_values AS epf ON (epf.value_id = extra_value_id2 or epf.value_id = extra_value_id3 or epf.value_id = extra_value_id4 or epf.value_id = extra_value_id5 or epf.value_id = extra_value_id6 or epf.value_id = extra_value_id8 or epf.value_id = extra_value_id9 ) and (epf.languages_id = "4") WHERE p2c.n2 = "91041" AND p.products_status = "1" AND p.vendu = "0" AND pd.language_id = "4" GROUP BY epf.epf_value ORDER BY epf.sort_order, epf.epf_value
                                    


                                    La requête est plus lisible mais le temps de chargement reste exactement le même.

                                    Je suis prêt à travailler la dessus quitte à revoir des champs dans ma BDD et c'est bien pour ça que je poste ici pour des conseils sur la marche à suivre.

                                    Aurais tu une piste pour optimiser tout ça sans refaire une nouvelle base ?

                                    Cdt,



                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 mai 2011 à 12:12:06

                                      Déjà ajoute un index sur extra_field_values (languages_id, value_id)

                                      Tracker.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 mai 2011 à 12:17:14

                                        > au début c'était a peu prés correct

                                        C'est le problème avec les codeurs boulets qui n'y connaissent rien en BDD : ça marche toujours très bien sur une base minuscule avec 50 produits, mais sur une base (toujours petite) avec 10000 produits c'est l'effondrement total.

                                        Toutes les tables sont en MyISAM, aucune foreign key, parent_id=0 au lieu de NULL dans les catégories pour noter la racine (donc impossible de mettre une contrainte en l'état), etc. Enfin c'est du osCommerce quoi. Par défaut t'as pas de transactions, aucune intégrité garantie. On trouvait parfois des commandes avec n'importe quoi dedans, ou des trucs bizarres... rendre ce truc utilisable est un gros boulot.

                                        Tu vas devoir modifier pas mal le code.

                                        Oublie ton histoire de 3 champs dans PRODUCTS_TO_CATEGORIES, c'est atroce.

                                        Pour manipuler des arbres, MySQL est nul : pas de requêtes WITH RECURSIVE !... Mais on va lui apprendre.

                                        CREATE TABLE t (
                                         categories_id INTEGER PRIMARY KEY,
                                         parent_id INTEGER, KEY(parent_id),
                                         path VARCHAR(255)
                                        ) ENGINE=InnoDB;
                                        
                                        INSERT INTO t SELECT categories_id, parent_id, categories_id
                                        FROM categories WHERE parent_id IS NULL OR parent_id=0;
                                        
                                        -- répéter la requête suivante jusqu'à ce qu'elle n'insère plus rien :
                                        
                                        INSERT INTO t SELECT c.categories_id, c.parent_id, CONCAT( parent.path, '.', c.categories_id )
                                        FROM t parent
                                        LEFT JOIN t child ON (child.parent_id = parent.categories_id)
                                        JOIN categories c ON ( c.parent_id = parent.categories_id )
                                        WHERE child.parent_id IS NULL;
                                        
                                        ALTER TABLE categories ADD path VARCHAR(255) NULL;
                                        
                                        UPDATE categories JOIN t USING (categories_id) SET categories.path = t.path;
                                        
                                        CREATE INDEX categories_path ON categories( path );
                                        
                                        SELECT * FROM categories WHERE categories_id = 89915;
                                        +---------------+------------------+-----------+------------+---------------------+---------------------+-------------+
                                        | categories_id | categories_image | parent_id | sort_order | date_added          | last_modified       | path        |
                                        +---------------+------------------+-----------+------------+---------------------+---------------------+-------------+
                                        |         89915 |                  |     89509 |         13 | 2010-11-10 15:22:09 | 2010-11-13 16:52:09 | 89509.89915 |
                                        +---------------+------------------+-----------+------------+---------------------+---------------------+-------------+
                                        
                                        SELECT * FROM categories WHERE path LIKE '89509.89915.%';
                                        +---------------+------------------+-----------+------------+---------------------+---------------+-------------------------+
                                        | categories_id | categories_image | parent_id | sort_order | date_added          | last_modified | path                    |
                                        +---------------+------------------+-----------+------------+---------------------+---------------+-------------------------+
                                        |         89916 | NULL             |     89915 |          2 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89916       |
                                        |         89917 | NULL             |     89916 |          0 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89916.89917 |
                                        |         89936 | NULL             |     89916 |          1 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89916.89936 |
                                        |         89958 | NULL             |     89916 |          5 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89916.89958 |
                                        |         89959 | NULL             |     89916 |          2 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89916.89959 |
                                        |         90409 | NULL             |     89916 |          3 | 2010-11-10 15:22:15 | NULL          | 89509.89915.89916.90409 |
                                        |         89923 | NULL             |     89915 |          7 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89923       |
                                        |         89924 | NULL             |     89923 |          0 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89923.89924 |
                                        |         89929 | NULL             |     89923 |          2 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89923.89929 |
                                        |         89930 | NULL             |     89923 |          5 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89923.89930 |
                                        |         89931 | NULL             |     89923 |          3 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89923.89931 |
                                        |         90019 | NULL             |     89923 |          1 | 2010-11-10 15:22:10 | NULL          | 89509.89915.89923.90019 |
                                        |         90442 | NULL             |     89923 |          4 | 2010-11-10 15:22:16 | NULL          | 89509.89915.89923.90442 |
                                        |         89937 | NULL             |     89915 |          0 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89937       |
                                        |         89938 | NULL             |     89937 |        999 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89937.89938 |
                                        |         89942 | NULL             |     89915 |          3 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942       |
                                        |         89943 | NULL             |     89942 |          3 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89943 |
                                        |         89944 | NULL             |     89942 |          1 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89944 |
                                        |         89945 | NULL             |     89942 |          2 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89945 |
                                        |         89946 | NULL             |     89942 |          4 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89946 |
                                        |         89947 | NULL             |     89942 |          6 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89947 |
                                        |         89948 | NULL             |     89942 |          5 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89948 |
                                        |         89949 | NULL             |     89942 |          8 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89949 |
                                        |         89950 | NULL             |     89942 |          7 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89942.89950 |
                                        |         90523 | NULL             |     89942 |          0 | 2010-11-10 15:22:17 | NULL          | 89509.89915.89942.90523 |
                                        |         89960 | NULL             |     89915 |         11 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89960       |
                                        |         89961 | NULL             |     89960 |        999 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89960.89961 |
                                        |         89962 | NULL             |     89915 |          9 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89962       |
                                        |         89963 | NULL             |     89962 |        999 | 2010-11-10 15:22:09 | NULL          | 89509.89915.89962.89963 |
                                        |         90328 | NULL             |     89915 |          8 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90328       |
                                        |         90329 | NULL             |     90328 |          1 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90328.90329 |
                                        |         90330 | NULL             |     90328 |          0 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90328.90330 |
                                        |         90331 | NULL             |     90328 |          2 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90328.90331 |
                                        |         90457 | NULL             |     90328 |          3 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90328.90457 |
                                        |         90458 | NULL             |     90328 |          4 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90328.90458 |
                                        |         90459 | NULL             |     90328 |          5 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90328.90459 |
                                        |         90462 | NULL             |     90328 |          6 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90328.90462 |
                                        |         90464 | NULL             |     90328 |          9 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90328.90464 |
                                        |         90466 | NULL             |     90328 |          7 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90328.90466 |
                                        |         90467 | NULL             |     90328 |          8 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90328.90467 |
                                        |         90340 | NULL             |     89915 |         10 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90340       |
                                        |         90341 | NULL             |     90340 |          8 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90340.90341 |
                                        |         90342 | NULL             |     90340 |          9 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90340.90342 |
                                        |         90343 | NULL             |     90340 |         10 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90340.90343 |
                                        |         90344 | NULL             |     90340 |         11 | 2010-11-10 15:22:13 | NULL          | 89509.89915.90340.90344 |
                                        |         90474 | NULL             |     90340 |          0 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90474 |
                                        |         90478 | NULL             |     90340 |          1 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90478 |
                                        |         90479 | NULL             |     90340 |          2 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90479 |
                                        |         90480 | NULL             |     90340 |          3 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90480 |
                                        |         90482 | NULL             |     90340 |          4 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90482 |
                                        |         90484 | NULL             |     90340 |          5 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90484 |
                                        |         90485 | NULL             |     90340 |          7 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90485 |
                                        |         90487 | NULL             |     90340 |          6 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90340.90487 |
                                        |         93751 | NULL             |     90340 |        999 | 2011-02-18 10:51:10 | NULL          | 89509.89915.90340.93751 |
                                        |         90416 | NULL             |     89915 |          4 | 2010-11-10 15:22:15 | NULL          | 89509.89915.90416       |
                                        |         90417 | NULL             |     90416 |          1 | 2010-11-10 15:22:15 | NULL          | 89509.89915.90416.90417 |
                                        |         90418 | NULL             |     90416 |          0 | 2010-11-10 15:22:15 | NULL          | 89509.89915.90416.90418 |
                                        |         90419 | NULL             |     90416 |          2 | 2010-11-10 15:22:15 | NULL          | 89509.89915.90416.90419 |
                                        |         90420 | NULL             |     90416 |          3 | 2010-11-10 15:22:15 | NULL          | 89509.89915.90416.90420 |
                                        |         90431 | NULL             |     89915 |          5 | 2010-11-10 15:22:15 | NULL          | 89509.89915.90431       |
                                        |         90432 | NULL             |     90431 |        999 | 2010-11-10 15:22:15 | NULL          | 89509.89915.90431.90432 |
                                        |         90436 | NULL             |     89915 |          6 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90436       |
                                        |         90437 | NULL             |     90436 |          0 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90436.90437 |
                                        |         90439 | NULL             |     90436 |          1 | 2010-11-10 15:22:16 | NULL          | 89509.89915.90436.90439 |
                                        |         92106 | NULL             |     89915 |          1 | 2010-11-10 15:22:37 | NULL          | 89509.89915.92106       |
                                        |         92107 | NULL             |     92106 |        999 | 2010-11-10 15:22:37 | NULL          | 89509.89915.92106.92107 |
                                        +---------------+------------------+-----------+------------+---------------------+---------------+-------------------------+
                                        


                                        Ça c'est une gestion d'arbre toute simple. La colonne parent_id reste mais on dénormalise en ajoutant une colonne "path" qui contient le chemin d'accès (comme un chemin defichier) avec la liste des parents. Par exemple le chemin de la catégorie 89915 est "89509.89915" (son parent est 89509, et il n'a pas de parent) et pour obtenir tous ses enfants, on fait UNE SEULE requête qui utilise l'index, en mettant comme chemin : LIKE '89509.89915.%';

                                        Il faudra tenir ça à jour quand tu modifies les catégories.

                                        Si tu modifies ton code pour utiliser cette méthode, tu passeras de 7000 requêtes par page à quelque chose de plus raisonnable...

                                        Quand à tes extra_machins, la seule solution est de virer les colonnes numérotées et de mettre ça sous forme de table de lien (relation N-N).

                                        > ajoute un index sur extra_field_values (languages_id, value_id)

                                        Le problème c'est que MySQL n'arrive pas à optimiser le JOIN ON epf.value_id IN ( extra_value_id2, extra_value_id3, ... ) à cause de la conception minable de cette table !
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          17 mai 2011 à 14:11:52

                                          Bon fabrique la table simulée par product_description:

                                          -- table dont tu devras garantir le contenu
                                          CREATE TABLE product_to_extra_field_value
                                          ( products_id INT(11) NOT NULL, language_id INT(11) NOT NULL, value_id INT(11) NOT NULL, PRIMARY KEY(products_id, language_id, value_id));
                                          
                                          -- remplissage
                                          INSERT product_to_extra_field_value
                                          	SELECT products_id, language_id, extra_value_id2 FROM products_description WHERE extra_value_id2 != 0
                                          	UNION ALL
                                          	SELECT products_id, language_id, extra_value_id3 FROM products_description WHERE extra_value_id3 != 0
                                          	UNION ALL
                                          	SELECT products_id, language_id, extra_value_id4 FROM products_description WHERE extra_value_id4 != 0
                                          	UNION ALL
                                          	SELECT products_id, language_id, extra_value_id5 FROM products_description WHERE extra_value_id5 != 0	
                                          	UNION ALL
                                          	SELECT products_id, language_id, extra_value_id6 FROM products_description WHERE extra_value_id6 != 0	
                                          	UNION ALL
                                          	SELECT products_id, language_id, extra_value_id8 FROM products_description WHERE extra_value_id8 != 0	
                                          	UNION ALL
                                          	SELECT products_id, language_id, extra_value_id9 FROM products_description WHERE extra_value_id9 != 0;
                                          
                                          
                                          -- ta requête devient:
                                          SELECT DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id
                                          FROM products_description pd
                                          INNER JOIN products_to_categories p2c
                                          	ON pd.language_id = 4
                                          	AND pd.products_id = p2c.products_id
                                          	AND p2c.categories_id IN (91041, 93903, 93904, 93905, 93906, 93907, 93908, 91042, 91043, 91044, 91045, 91046, 91047, 91048, 91055, 91056, 91057, 91060, 91065, 91068, 91069, 91070, 92238, 92243, 92244, 91071, 92703, 91072, 91073, 91074, 91078, 91082, 91084, 91087, 93998, 93999, 94000, 94001, 94002, 94003, 94004, 94005, 91088, 91089, 91092, 91094, 91095, 91096, 91098, 91099, 91100, 91105, 91106, 91107, 91108, 91109, 91110, 91112, 91113, 91114, 91115, 91116, 91117, 91118, 91121, 91126, 91127, 91128, 91129, 91132, 91134, 91135, 91136, 91137, 91143, 91146, 91147, 91152, 91159, 91160, 91161, 91163, 91164, 91166, 91168, 91169, 91171, 91174, 91176, 91177, 92774, 92775, 92779, 92792, 92797, 92798, 92802, 92803, 92805, 92806, 92807, 92808, 92809, 92810, 91178, 91179, 91180, 91182, 91183, 91185, 91186, 92266, 92267, 92268, 92269, 92271, 92278, 92284, 92285, 92286, 92287, 92288, 92292, 92294, 92300, 91187, 91189, 91190, 91193, 91197, 92103, 92310, 92312, 92322, 91198, 91200, 91202, 91203, 91204, 91205, 91206, 91207, 91208, 91705, 91209, 91210, 91211, 91212, 91215, 92563, 92565, 92566, 92567, 91216, 91217, 91218, 91219, 92397, 92398, 92400, 91220, 93902, 91221, 91223, 91224, 91225, 91226, 91227, 91228, 93797, 93985, 93993, 93994, 93995, 94036, 94037, 94038, 91229, 91230, 91231, 91232, 91233, 91234, 91236, 91237, 91238, 91239, 91241, 91242, 91246, 91247, 91248, 91252, 91253, 91254, 91255, 91256, 91260, 91262, 91263, 92621, 92622, 92623, 92625, 92626, 92631, 92632, 92633, 92634, 92635, 91265, 92706, 91266, 92404, 92407, 92408, 91267, 91268, 91271, 92105, 92825, 92834, 92835, 92836, 92839, 92840, 92844, 92849, 92855, 92856, 92859, 91274, 91275, 91276, 91277, 91278, 91279, 91280, 91282, 91283, 91284, 91285, 93234, 93235, 93236, 93237, 91286, 92865, 92866, 92867, 92869, 92870, 92873, 92875, 92882, 92889, 91538, 91539, 91540, 91541, 91542, 92249, 92252, 92253, 92254, 92255, 92257, 92258, 92263, 92264, 92265, 91545, 92893, 92895, 92897, 92899, 92901, 92902, 92905, 92906, 92909, 92910, 92911, 92912, 92913, 92914, 92915, 92916, 92917, 92918, 92920, 92922, 92923, 92924, 92925, 92926, 92940, 91547, 92944, 92946, 92947, 91549, 91550, 91551, 91552, 91553, 91554, 91555, 91557, 91558, 91559, 91561, 91562, 91563, 91564, 91565, 91566, 91567, 91568, 91569, 91570, 91571, 91572, 91573, 91574, 93812, 91575, 91576, 91577, 92677, 92679, 92680, 91578, 91580, 91581, 91582, 91583, 91585, 91587, 93005, 93006, 93008, 93009, 93010, 91593, 91595, 93015, 93020, 93022, 93023, 93026, 93034, 93035, 93041, 93042, 93044, 93046, 93048, 91596, 91597, 92687, 92688, 92689, 92690, 92691, 92692, 92693, 91598, 93049, 93051, 91602, 91603, 91604, 91605, 91606, 91607, 91608, 91609, 91610, 91611, 91612, 91613, 91614, 91615, 91616, 91617, 91618, 91619, 91620, 91621, 91622, 91623, 91624, 91625, 91626, 91627, 91628, 91629, 91631, 91632, 91633, 91634, 91635, 91636, 91638, 91639, 91640, 91641, 93059, 93060, 93061, 93062, 91642, 91643, 91644, 93840, 93839, 93838, 93837, 93836, 93842, 93841, 91645, 91646, 91647, 91648, 91649, 91650, 91652, 91654, 91655, 91656, 91664, 91670, 93065, 93066, 93067, 91671, 91672, 91673, 91674, 93860, 93856, 93859, 93858, 93857, 93855, 93854, 91675, 91676, 91677, 91678, 91679, 91680, 91681, 91682, 91683, 91684, 91685, 93079, 93080, 93085, 93086, 93087, 93088, 93089, 93091, 93092, 93093, 93094, 93095, 93096, 93097, 93098, 91687, 91688, 91689, 91690, 91691, 91692, 91693, 91697, 91699, 91700, 91707, 91708, 91709, 91710, 91711, 93873, 93871, 93872, 93869, 93867, 93870, 93868, 91712, 91713, 91715, 93127, 93129, 93132, 91716, 91717, 91723, 91724, 91725, 91726, 91727, 91729, 91731, 91733, 91734, 91736, 91737, 91738, 91739, 91740, 91748, 91776, 92409, 92410, 92412, 92413, 92414, 92415, 92416, 92420, 92422, 92423, 92434, 92437, 92439, 92440, 92441, 92442, 92443, 92444, 91777, 91778, 92448, 92452, 92455, 92458, 92459, 92460, 92465, 91779, 91784, 92468, 92469, 92470, 92472, 92473, 92474, 92475, 92476, 92479, 92481, 92483, 92484, 92487, 92491, 92496, 92499, 92505, 93843, 93845, 93844, 93848, 93847, 93849, 93846, 91786, 91787, 91788, 91789, 91790, 91791, 91792, 91793, 91795, 91796, 91797, 91798, 91799, 91800, 91801, 91806, 91807, 91814, 91817, 92508, 92509, 92512, 93821, 93822, 93824, 93823, 93825, 91819, 91820, 91821, 91823, 91824, 91827, 93814, 93816, 93815, 93820, 93819, 93818, 93817, 91835, 91836, 91837, 92519, 92520, 92521, 92522, 92523, 92532, 92534, 92536, 92537, 93784, 93787, 93786, 93785, 91839, 91840, 91842, 91843, 91844, 91846, 91847, 92549, 92551, 91848, 91849, 91851, 91856, 91857, 93980, 93981, 93982, 93983, 93984, 94006, 93798, 93799, 93804, 93803, 93802, 93801, 93800, 91860, 91861, 91862, 91863, 91864, 91865, 91866, 91867, 91871, 91872, 91873, 91876, 91877, 91878, 91879, 91880, 91881, 91882, 91883, 91884, 91885, 91886, 91887, 91888, 91889, 91890, 91891, 91892, 91893, 91894, 91895, 91896, 91897, 91898, 91899, 91900, 91901, 91902, 91903, 91904, 91905, 91906, 91907, 91908, 91909, 93986, 93987, 93988, 93989, 93990, 93991, 93992, 91910, 91911, 94028, 94029, 94030, 94031, 94032, 94033, 94034, 94035, 92114, 92115, 92116, 92117, 92118, 92119, 92120, 92123, 92124, 92126, 92130, 92132, 92135, 92136, 92137, 92138, 92139, 92140, 92141, 92142, 92143, 92144, 92147, 92148, 92149, 92150, 92151, 92152, 92153, 92154, 92157, 92158, 92159, 92160, 92161, 92162, 92163, 92164, 92165, 92170, 92171, 93768, 93773, 93772, 93771, 93769, 93770, 93775, 93776, 93774, 92176, 92177, 92178, 92179, 92181, 92182, 92183, 92184, 92185, 92186, 92187, 92188, 92189, 92190, 92191, 92192, 92193, 92194, 92195, 92196, 92198, 92199, 92200, 92201, 92202, 92203, 92204, 92205, 92206, 92207, 92208, 92209, 92211, 92212, 92213, 92215, 92217, 92219, 92222, 92224, 92225, 92226, 92227, 92228, 92229, 92231, 92232, 92326, 92328, 92330, 92331, 92332, 92333, 92334, 92335, 92336, 92337, 92338, 92339, 92340, 92341, 92342, 92343, 92344, 92345, 92346, 92347, 92348, 92349, 92351, 92353, 92355, 92357, 92358, 92359, 92360, 92361, 92362, 92363, 92323, 92366, 92367, 92368, 92370, 92374, 92376, 92377, 92379, 92380, 92381, 92382, 92385, 92391, 92392, 92393, 93874, 93876, 93875, 93877, 93879, 93878, 93861, 93862, 93865, 93864, 93863, 93866, 93850, 93851, 93853, 93852, 93826, 93828, 93832, 93830, 93831, 93829, 93827, 93835, 93834, 93833, 93788, 93790, 93789, 93779, 93781, 93780, 93783, 93782, 93791, 93792, 93793, 93777, 93778, 92552, 92553, 92558, 92559, 92560, 92561, 92568, 92569, 92570, 92571, 92572, 92573, 92574, 92575, 92576, 92578, 92579, 92580, 92581, 92582, 92583, 92584, 92585, 92587, 92588, 92589, 92590, 92591, 92592, 92596, 92597, 92599, 92600, 92602, 92603, 92604, 92605, 92607, 92608, 92609, 92610, 92611, 92612, 92613, 92614, 92615, 92616, 92617, 92618, 92619, 92638, 92639, 92640, 92641, 92642, 92643, 92645, 92646, 92647, 92648, 92649, 92650, 92651, 92652, 92653, 92654, 92655, 92656, 92657, 92658, 92659, 92660, 92661, 92662, 92663, 92664, 92665, 92666, 92667, 92668, 92669, 92670, 92671, 92672, 92681, 92682, 92683, 92684, 92685, 92686, 92817, 92818, 92819, 92821, 92860, 92861, 92863, 92864, 92941, 92942, 92948, 92949, 92950, 92951, 92952, 92953, 92959, 92961, 92962, 92964, 92965, 92966, 92967, 92968, 92969, 92970, 92971, 92972, 92973, 92975, 92976, 92977, 92978, 92979, 92980, 92981, 92982, 92983, 92984, 92985, 92986, 92989, 92991, 92992, 92994, 92995, 92996, 92997, 92998, 92999, 93000, 93002, 93054, 93055, 93056, 93057, 93069, 93070, 93071, 93101, 93102, 93103, 93105, 93106, 93108, 93109, 93110, 93111, 93112, 93113, 93114, 93115, 93116, 93117, 93118, 93119, 93120, 93121, 93122, 93123, 93125, 93133, 93134, 93135, 93136, 93137, 93138, 93139, 93140, 93141, 93142, 93143, 93144, 91719, 91720, 91721, 93145, 93146, 93148, 93156, 93157, 93158, 93161, 93162, 93164, 93165, 93166, 93167, 93168, 93169, 93170, 93171, 93172, 93173, 93174, 93175, 93176, 93177, 93178, 93179, 93181, 93183, 93184, 93185, 93186, 93187, 93188, 93191, 93194, 93195, 93196, 93199, 93208, 93809, 93811, 93810, 93805, 93807, 93808, 93806, 93209, 93210, 93212, 93213, 93214, 93215, 93216, 93217, 93218, 93219, 93220, 93221, 93222, 93223, 93224, 93225, 93226, 93227, 93228, 93229, 93230, 93794, 93796, 93795, 93238, 93239, 93240, 93241, 93242, 93244, 93245, 93246, 93247, 93909, 93910, 93911, 93912, 93913, 93914, 93915, 93916, 93917, 93918, 93919, 93920, 93921, 93922, 93923, 93924, 93925, 93926, 93927, 93928, 93929, 93930, 93931, 93932, 93933, 93934, 93935, 93936, 93937, 93938, 93939, 93940, 93941, 93942, 93943, 93944, 93945, 93946, 93947, 93948, 93949, 93950, 93951, 93952, 93953, 93954, 93955, 93956, 93957, 93958, 93959, 93960, 93961, 93962, 93963, 93964, 93965, 93966, 93967, 93968, 93969, 93970, 93971, 93972, 93973, 93974, 93975, 93976, 93977, 93978, 93979, 93996, 93997, 94007, 94008, 94009, 94010, 94011, 94012, 94013, 94014, 94015, 94016, 94017, 94018, 94019, 94020, 94021, 94022, 94023, 94024, 94025, 94026, 94027)
                                          INNER JOIN categories c
                                           	ON c.categories_id = p2c.categories_id
                                          LEFT JOIN product_to_extra_field_value p2efv
                                          	ON pd.products_id = p2efv.products_id
                                          	AND pd.language_id = 4
                                          LEFT JOIN extra_field_values epf
                                          	ON epf.languages_id = 4
                                          	AND epf.value_id = p2efv.value_id
                                          ORDER BY epf.sort_order, epf.epf_value
                                          


                                          Tracker.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 mai 2011 à 15:18:44

                                            Hello,

                                            Merci pour vos réponses tracker et lord

                                            En appliquant la solution de tracker j'obtiens sur la catégories la plus chargée un temps de réponse /100 :

                                            Affichage des lignes 0 - 29 (1 000 total, Traitement en 0.2669 sec.)

                                            Je vais coupler avec la solution de lord pour gagner encore et pour rendre la base plus propre qu'actuellement.

                                            Je finalise des test pour convertir ça en oscommerce sans faire bugguer toute la boutique et je vous tient informé.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              17 mai 2011 à 15:23:06

                                              Tu devras mettre à jour product_to_extra_field_value, fréquement, soit sur modif (via du code) soit avec un event mysql (genre tous les soirs).

                                              Tracker.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                17 mai 2011 à 15:32:25

                                                Oui je fais des mises à jour via import en cron donc c'est pas un souci de ce côté là

                                                Voici ce que ça donne au final en dur :

                                                SELECT DISTINCT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id
                                                FROM products p
                                                INNER JOIN products_description pd on p.products_id = pd.products_id
                                                INNER JOIN products_to_categories p2c
                                                	ON pd.language_id = 4
                                                	AND pd.products_id = p2c.products_id
                                                AND p.vendu = "0"
                                                and p.products_status = "1"
                                                INNER JOIN categories c
                                                 	ON c.categories_id = p2c.categories_id
                                                AND c.path LIKE '89549.91041.%'
                                                LEFT JOIN product_to_extra_field_value p2efv
                                                	ON pd.products_id = p2efv.products_id
                                                	AND pd.language_id = 4
                                                LEFT JOIN extra_field_values epf
                                                	ON epf.languages_id = 4
                                                	AND epf.value_id = p2efv.value_id
                                                ORDER BY epf.sort_order, epf.epf_value
                                                


                                                Je vais de ce pas modifier mon oscommerce pour lui donner la nouvelle syntaxe ;-)

                                                1000 merci à vous deux pour le temps passé.

                                                Je ne ferme pas ce topic, je le ferais après avoir modifié mon code.

                                                Cdt,

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  17 mai 2011 à 16:23:02

                                                  Sinon si t'es passé en version 5.1 de mysql regarde par là
                                                  http://dev.mysql.com/tech-resources/ar [...] l-events.html

                                                  Bon courage pour les modifs ;)

                                                  Tracker.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    17 mai 2011 à 19:27:11

                                                    On peut changer ça un petit peu (en incluant le chemin de la table catégories histoire de ne pas avoir à générer cet énorme IN)

                                                    ALTER TABLE products_to_categories DROP KEY products_id, DROP KEY categories_id, DROP PRIMARY KEY, ADD PRIMARY KEY (categories_id, products_id), ADD KEY ( products_id, categories_id ); 
                                                    
                                                    show create table products_to_categories;
                                                    | Table                  | Create Table                                                                                                                                                                                                                                              | products_to_categories | CREATE TABLE `products_to_categories` (
                                                      `products_id` int(11) NOT NULL,
                                                      `categories_id` int(11) NOT NULL,
                                                      PRIMARY KEY (`categories_id`,`products_id`),
                                                      KEY `categories_id` (`categories_id`,`products_id`)
                                                    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
                                                    
                                                    ALTER TABLE products_description DROP PRIMARY KEY, DROP KEY language_id, ADD PRIMARY KEY (language_id, products_id), ADD KEY( products_id, language_id );
                                                    
                                                    ALTER TABLE product_to_extra_field_value ADD KEY ( language_id, products_id, value_id );
                                                    
                                                    -- ta requête devient:
                                                    SELECT epf.epf_value, epf.sort_order, epf.epf_id , epf.value_id
                                                    FROM (SELECT DISTINCT p2efv.value_id
                                                      FROM       categories c
                                                      JOIN products_to_categories p2c ON (c.categories_id = p2c.categories_id)
                                                      JOIN products_description pd ON (pd.language_id = 4 AND pd.products_id = p2c.products_id)
                                                      JOIN product_to_extra_field_value p2efv ON (pd.products_id = p2efv.products_id AND pd.language_id = 4)
                                                      WHERE c.path like '89549.%'
                                                    ) x
                                                    JOIN extra_field_values epf ON (epf.languages_id = 4 AND epf.value_id = x.value_id)
                                                    ORDER BY epf.sort_order, epf.epf_value
                                                    


                                                    hop, 0.1s

                                                    tu vas devoir refaire une passe sur toutes les box à la con de oscommerce qui listent des produits et des catégories : en général par défaut elles font des requêtes dans des boucles, c'est pour ça que tu as 7000 requêtes par page...

                                                    EDIT : lol.

                                                    Pour déconner j'ai mis ça dans Postgres...

                                                    Requête monstrueuse ci-dessus avec IN(une montagne de valeurs) : 2.6s
                                                    Celle de ce message : 0.1s

                                                    (sans index puisque les tables sont parcourues presque en entier...)




                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      18 mai 2011 à 12:15:17

                                                      Exact, test effectué à 0.1s avec ton code tracker

                                                      J'ai commencé à intégrer à ma boutique oscommerce pour l'instant seulement sur la partie filtres, je dois encore effectuer des tests pour vérifier l'influence sur la structure d'oscommerce de telles modifications (diverses boxes), donc je préfère être prudent et prendre le temps de tester sur ma version miroir.

                                                      En fait les 7000 requêtes qui sont affichées dans mon footer sont liées à une fonction Oscommerce qui compte les produits par catégories (7000 requêtes identiques ... select count), je vais la remplacer par une lecture dans la BDD pour limiter le massacre.

                                                      Grâce à votre aide le serveur sql respire un peu mieux ;-)

                                                      1000 Merci encore,

                                                      Cdt

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Regexp sur jointure mysql

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown