Salut,
J'ai fait un moteur de recherche pour mon site, à l'époque il marchait plutôt bien (moins de 5 secs pour retourner les résultats), mais depuis la BDD a grossis, et le script depuis un ajout conséquent dans la BDD est complètement à la ramasse. 15 secs de recherche minimum.
J'ai donc décidé de tout refaire mes requêtes, mais je rencontre un problème bizarre que je vais vous exposer ici.
Tout d'abord la structure de mes tables :
La table structure a 63000 entrées.
La table apourss_sscat avait 63000 entrées, elle est récemment passée à 105000 entrées.
La table ss_sscategorie a 21 entrées.
Voici la partie de mon moteur qui me pose problème :
Tout semble normal, sauf que..
Si je vire la partie :
inner join apourss_sscat as ap1 on (ap1.struct_id = s1.struct_id)
inner join ss_sscategorie as ss1 on (ss1.ss_sscat_id = ap1.ss_sscat_id)
Ma requête prend 1.5 sec environs, donc génial.
Si je rajoute cette partie elle prend plus de 4.5 sec !
Je trouve que c'est énorme le temps en plus par rapport à ce que font les lignes.
J'ai effectuer une "défragmentation" (option phpmyadmin) de chacune de ces trois tables. Mes index me semblent ok.
Bref, je ne vois pas ce qui justifie la durée de cette requête.
Vous pouvez m'éclairer svp ?
Merci
J'ai fait un moteur de recherche pour mon site, à l'époque il marchait plutôt bien (moins de 5 secs pour retourner les résultats), mais depuis la BDD a grossis, et le script depuis un ajout conséquent dans la BDD est complètement à la ramasse. 15 secs de recherche minimum.
J'ai donc décidé de tout refaire mes requêtes, mais je rencontre un problème bizarre que je vais vous exposer ici.
Tout d'abord la structure de mes tables :
Code:
CREATE TABLE `structure` (
`STRUCT_ID` int(11) NOT NULL auto_increment,
`VILLE_ID` int(11) NOT NULL default '0',
`STRUCT_NOM` varchar(80) NOT NULL default '',
`STRUCT_DESC` text NOT NULL,
PRIMARY KEY (`STRUCT_ID`),
KEY `STRUCT_NOM` (`STRUCT_NOM`),
KEY `VILLE_ID` (`VILLE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `apourss_sscat` (
`SS_SSCAT_ID` smallint(3) unsigned NOT NULL default '0',
`STRUCT_ID` int(11) NOT NULL default '0',
UNIQUE KEY `SS_SSCAT_ID_2` (`SS_SSCAT_ID`,`STRUCT_ID`),
KEY `STRUCT_ID` (`STRUCT_ID`),
KEY `SS_SSCAT_ID` (`SS_SSCAT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `ss_sscategorie` (
`SS_SSCAT_ID` smallint(3) unsigned NOT NULL default '0',
`SS_SSCAT_LIB` varchar(60) NOT NULL default '',
`SSCAT_ID` int(11) NOT NULL default '0',
`THEMA_ID` int(11) NOT NULL default '1',
PRIMARY KEY (`SS_SSCAT_ID`),
KEY `SSCAT_ID` (`SSCAT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
La table structure a 63000 entrées.
La table apourss_sscat avait 63000 entrées, elle est récemment passée à 105000 entrées.
La table ss_sscategorie a 21 entrées.
Voici la partie de mon moteur qui me pose problème :
Code:
select s1.struct_id as id
from structure as s1 use index (primary)
inner join ville as v1 on (v1.ville_id = s1.ville_id)
inner join apourss_sscat as ap1 on (ap1.struct_id = s1.struct_id)
inner join ss_sscategorie as ss1 on (ss1.ss_sscat_id = ap1.ss_sscat_id)
where
(
struct_nom like '%$recherche%' or
ville_nom like '%$recherche%' or
ville_cp like '%$recherche%' or
struct_desc like '%$recherche%'
)
Tout semble normal, sauf que..
Si je vire la partie :
inner join apourss_sscat as ap1 on (ap1.struct_id = s1.struct_id)
inner join ss_sscategorie as ss1 on (ss1.ss_sscat_id = ap1.ss_sscat_id)
Ma requête prend 1.5 sec environs, donc génial.
Si je rajoute cette partie elle prend plus de 4.5 sec !
Je trouve que c'est énorme le temps en plus par rapport à ce que font les lignes.
J'ai effectuer une "défragmentation" (option phpmyadmin) de chacune de ces trois tables. Mes index me semblent ok.
Bref, je ne vois pas ce qui justifie la durée de cette requête.
Vous pouvez m'éclairer svp ?
Merci