genmin Posté 12 Juin 2008 Posté 12 Juin 2008 Bonjour a vous tous. Je cherche à optimiser une requête mysql : SELECT id, prix, type_bien, date_parution, date_maj, surface, nb_pieces, ville, cp, texte, tel_fixe, tel_fixe1, tel_mobile, tel_mobile1 FROM annonces_ne WHERE (statut='En cours' OR statut IS NULL) AND type_transaction='VENTE' AND (ville='CANNES' OR ville='CANNES LA BOCCA' OR ville='MOUGINS' ) ORDER BY annonces_ne.date_maj DESC LIMIT 0, 15 Il faut savoir que ma table contient 427.849 enregistrements. Cette requête s'exécute en 5469.8ms et celle-ci : SELECT count(id) FROM annonces_ne WHERE (statut='En cours' OR statut IS NULL) AND type_transaction='VENTE' AND (ville='CANNES' OR ville='CANNES LA BOCCA' OR ville='MOUGINS' ) ORDER BY annonces_ne.date_maj DESC s'exécute en 4261.5ms Je pense déjà reprendre la structure de la base qui n'est pas du tout optimisée, mais est ce là mon seul problème. Merci de me faire par de vos expériences.
Kioob Posté 12 Juin 2008 Posté 12 Juin 2008 Hello, quels sont les indexes présents sur la table en question ? Et que donne un EXPLAIN de ta requête ? PS : peux tu reformater ton post afin que les requetes soient un peu plus lisibles stp ? Quelques retours à la ligne faciliteraient la lecture.
Bigb06 Posté 13 Juin 2008 Posté 13 Juin 2008 Une requête sur une simple table avec si peu d'enregistrements (450 000 c'est rien), ca doit être un problème d'index. Il faut que tu réflechisses bien sur quelle colonne de ta clause where tu vas devoir/pouvoir placer un index, qui va accélérer tes select mais ralentir tes insert. Par exemple sur la colonne ville?
genmin Posté 13 Juin 2008 Auteur Posté 13 Juin 2008 (modifié) Merci pour vos réponses. Voici la structure de ma table avec un exemple de 3 enregistrements, mais comme je vous l'ai déjà dis elle est vraiment pas belle. CODE -- -- Structure de la table `annonces_ne` -- CREATE TABLE `annonces_ne` ( `id` int(11) NOT NULL auto_increment, `ref` varchar(20) NOT NULL default '', `date_parution` date NOT NULL default '0000-00-00', `date_maj` date NOT NULL default '0000-00-00', `relance` date NOT NULL default '0000-00-00', `source` varchar(255) NOT NULL default '', `type_transaction` varchar(255) NOT NULL default '', `type_bien` varchar(255) NOT NULL default '', `texte` text character set latin1 collate latin1_general_ci NOT NULL, `ville` varchar(255) NOT NULL default '', `cp` varchar(5) NOT NULL default '', `quartier` varchar(20) NOT NULL default '', `tel_fixe` varchar(14) NOT NULL default '', `tel_fixe1` varchar(14) NOT NULL default '', `tel_mobile` varchar(14) NOT NULL default '', `tel_mobile1` varchar(14) NOT NULL default '', `email` varchar(255) NOT NULL default '', `surface` float NOT NULL default '0', `prix` float NOT NULL default '0', `nb_pieces` varchar(5) NOT NULL default '', `statut` varchar(10) NOT NULL default 'En cours', `Expr1` int(11) NOT NULL default '0', `essaisecteur` varchar(50) default NULL, `chauffage` varchar(10) default NULL, `Mode_chauffage` varchar(10) default NULL, `typechauffage` varchar(10) default NULL, `impotsFonc_euro` smallint(5) default NULL, `taxeHab_euro` smallint(5) default NULL, `charges_euro` smallint(5) default NULL, `nbrchambre` tinyint(3) default NULL, `nbrSb` tinyint(3) default NULL, `gardien` char(3) default NULL, `cave` char(3) default NULL, `cheminee` char(3) default NULL, `ascenceur` char(3) default NULL, `interphone` char(3) default NULL, `alarme` char(3) default NULL, `cuisequ` char(3) default NULL, `cuisam` char(3) default NULL, `portb` char(3) default NULL, `piscine` char(3) default NULL, `surfsejour` mediumint(3) default NULL, `niveau` tinyint(4) default NULL, `soussol` tinyint(4) default NULL, `etage` tinyint(4) default NULL, `suretage` tinyint(4) default NULL, `etatint` varchar(9) default NULL, `etatext` varchar(9) default NULL, `etatcom` varchar(9) default NULL, `isolation` varchar(10) default NULL, `couverture` varchar(8) default NULL, `construction` varchar(18) default NULL, `terrain` mediumint(7) default NULL, `terrasse` mediumint(7) default NULL, `grenier` mediumint(7) default NULL, `typeext` varchar(8) default NULL, `comble` mediumint(7) default NULL, `nbparking` tinyint(2) default NULL, `nbparking2` tinyint(2) default NULL, `typeparking` varchar(19) default NULL, `typeparking2` varchar(19) default NULL, `anconstruc` smallint(4) default NULL, `transport` varchar(25) NOT NULL, `prox_trans` varchar(25) NOT NULL, `prox_com` varchar(25) NOT NULL, `station` varchar(25) NOT NULL, `ecole` varchar(25) NOT NULL, `occupation` varchar(25) NOT NULL, `travaux` varchar(25) NOT NULL, `solsejour` varchar(11) default NULL, `solchambre` varchar(11) default NULL, `solcuisine` varchar(11) default NULL, `solsdb` varchar(11) default NULL, `expo` varchar(10) default NULL, `expochambre` varchar(10) default NULL, `vue_sej` varchar(25) NOT NULL, `vue_ch` varchar(25) NOT NULL, `chargechauff` smallint(5) default NULL, `adresse` text, `Urgence` tinyint(1) NOT NULL default '0', `nom` varchar(20) default NULL, `prenom` varchar(20) default NULL, `adressevendeur` varchar(30) default NULL, `villevendeur` varchar(30) default NULL, `codevendeur` int(5) default NULL, `commentaires` varchar(50) default NULL, `nomct` varchar(20) default NULL, `prenomct` varchar(20) default NULL, `titre` varchar(5) default NULL, `nomtel` varchar(15) default NULL, `nomtel2` varchar(15) default NULL, `nomtel3` varchar(15) default NULL, `rdv` char(1) default NULL, `agence` varchar(50) NOT NULL default '', `idnego` int(4) NOT NULL default '0', `locataire` tinyint(1) NOT NULL default '0', `clim` tinyint(1) NOT NULL, `trav_recent` varchar(25) NOT NULL, `trav_votes` varchar(25) NOT NULL, `trav_prevoir` varchar(25) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ref` (`ref`), KEY `surface` (`surface`), KEY `prix` (`prix`), KEY `nb_pieces` (`nb_pieces`), KEY `statut` (`statut`) ) ENGINE=MyISAM AUTO_INCREMENT=10578180 DEFAULT CHARSET=latin1 AUTO_INCREMENT=10578180 ; -- -- Contenu de la table `annonces_ne` -- INSERT INTO `annonces_ne` VALUES (10035821, 'A-0003-100004904331', '2007-04-11', '2007-11-22', '0000-00-00', 'pap.fr', 'VENTE', 'APPARTEMENT', 'proche hippodrome. 2 piÚces 45 m², au 1er, plein sud, vue dégagée sur jardin, calme. entrée/placard, séjour, cuisine américaine, parquet, wc séparés, salle de bains, chambre, parfait état. cave, parking, local vélos. eau et chauffage collectifs. 205.000 . 06.09.32.21.64. http://appartement-92380.site-pap.fr', 'GARCHES', '92380', '', '', '', '0609322164', '', '', 45, 205000, '2', 'Perdu', 0, '', '', '', '', 0, 0, 0, 0, 0, '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, 0, '', '', '', '', '', '', 0, 0, 0, '', 0, 0, 0, '', '', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' , 0, '', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'o', 'Suresnes', 35, 0, 0, '', '', ''); INSERT INTO `annonces_ne` VALUES (10172079, 'A-0002-100004883328', '2007-04-05', '2008-01-10', '0000-00-00', 'pap.fr', 'VENTE', 'Appartement', '3 piÚces 65,42 m², libre au 3e ascenseur, immeuble en pierre de taille dans résidence arborée : cuisine équipée, séjour double 27 m² (parquet) 2 chambres, salle de bains, wc séparés, cellier, balcon. cave. 220.000 ?. (agences s\\''abstenir). 06 22 57 06 53.', 'BRY SUR MARNE', '94360', '', '', '', '0622570653', '', 'michele.vinet1_AT_free.fr', 65, 220000, '3', 'En cours', 0, '', '', '', '', 0, 0, 0, 0, 0, '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, 0, '', '', '', '', '', '', 0, 0, 0, '', 0, 0, 0, '', '', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, '', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', 0, 0, 0, '', '', ''); INSERT INTO `annonces_ne` VALUES (10014058, 'A-0030-100001908797', '2005-08-08', '2008-06-12', '0000-00-00', 'pap.fr', 'VENTE', 'MAISON', 'la treille. située dans les collines de marcel pagnol, maison de caractÚre, 200 m² sur terrain arboré 3.170 m², t7/8, 3 salles de bains. studio 25 m² indépendant. plein sud. piscine. proximité golfs la salette et allauch. 660.000 ?. (agences s''abstenir). 04.91.43.33.08 ou 06.32.28.94.40.', 'MARSEILLE 11', '13011', '', '0407732511', '0491433308', '0632289440', '', '', 200, 660000, '', 'Perdu', 0, '', '', '', '', 0, 0, 0, 0, 0, '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, 0, '', '', '', '', '', '', 0, 0, 0, '', 0, 0, 0, '', '', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, '', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Marseille08', 82, 0, 0, '', '', ''); INSERT INTO `annonces_ne` VALUES (10014218, 'A-0030-100002435402', '2005-11-17', '2008-06-12', '0000-00-00', 'pap.fr', 'VENTE', 'MAISON', 'quartier vieille chapelle. escale borély. petite villa d''architecte atypique, 1997, t2 avec grande terrasse entiÚrement carrelée, tout en rez-de-chaussée : cuisine équipée ouverte sur séjour, salon bibliothÚque avec poutres et grande hauteur plafond, coin bureau, chambre avec accÚs direct douche, lavabo et rangements, wc indépendants. exposée est-ouest. bus ligne 19, commerces et plages 100 m. parking privatif sur cour intérieure, cave, box moto. (agences s''abstenir). 315.000 ?. 06.12.24.10.32 http://www.monbien.fr/pa233', 'MARSEILLE 08', '13008', '', '', '', '0612241032', '', 'phil.de-saint-francois_AT_laposte.net', 0, 315000, '2', 'En cours', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, '', '', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Marseille08', 42, 0, 0, '', '', ''); et voici un EXPLAIN de ma requete : CODE id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE annonces_ne ref statut statut 12 const 420344 Using where; Using filesort Modifié 13 Juin 2008 par genmin
Kioob Posté 14 Juin 2008 Posté 14 Juin 2008 Hello, essaye de remplacer l'index sur statut par un index sur statut+ville (dans cet ordre). Par contre pour le filesort, je pense que tu n'as guère le choix ici... enfin tu peux toujours tenter d'ajouter une troisième colonne à cet index (date_maj) mais je ne suis franchement pas certain que mySQL s'en servirait.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant