Bonjour à tous et bonne année !
Voilà, j'ai un souci de performance sur une base Mysql version 4.0 :
J'ai 2 tables : la table ville avec comme identifiant des pays leur code
international unique (exemple suisse=>CH);
et une table pays.
CREATE TABLE `ville` (
`VILLE_ID` int(11) NOT NULL auto_increment,
`VILLE_NOM` varchar(50) NOT NULL default '',
`VILLE_CODE_POSTAL` int(5) unsigned zerofill default '00000',
`PAYS_ID` char(2) NOT NULL default '',
UNIQUE KEY `PK_VILLE_ID` (`VILLE_ID`),
FULLTEXT KEY `IDX_VILLE_NOM` (`VILLE_NOM`),
FULLTEXT KEY `IDX_PAYS_ID` (`PAYS_ID`)
) ENGINE=MyISAM ;
CREATE TABLE `pays` (
`PAYS_NOM` varchar(50) NOT NULL default '',
`PAYS_ID` char(2) NOT NULL,
UNIQUE KEY `PK_PAYS_ID` (`PAYS_ID`),
FULLTEXT KEY `IDX_PAYS_NOM` (`PAYS_NOM`),
FULLTEXT KEY `IDX_PAYS_ID` (`PAYS_ID`)
) ENGINE=MyISAM ;
et quand je souhaite extraire le nombre de ville de chaque pays
ma requête dure entre 30 et 40 secondes ;
voici ma situation:
le temps d'execution est le même chez mon hébergeur (donc exit problème machine)
base Mysql version 4.0 ;
nombre de villes total =46087
nombre pays=237
voici ma requête :
SELECT
pays.PAYS_ID ,
COUNT(ville.PAYS_ID) AS NOMBRE_VILLE
FROM ville
RIGHT JOIN pays
ON pays.PAYS_ID=ville.PAYS_ID
GROUP BY pays.PAYS_ID
ORDER BY NOMBRE_VILLE DESC
-----------
bien sûr, le RIGHT me permet de montrer les pays avec 0 villes (cela me renseigne sur les pays sans villes).
Si j'oublie quelques informations, je m'en excuse d'avance !
Cordialement.
Partager