Aller au contenu

optimisation de requete


Sujets conseillés

Posté

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.

Posté

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.

Posté

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?

Posté (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 Extra

1 SIMPLE annonces_ne ref statut statut 12 const 420344 Using where; Using filesort

Modifié par genmin
Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...