Indexes sur tables en base

Mammouth du PHP | 643 Messages

14 août 2016, 10:22

Salut les jeunes,
Bon je chercher à améliorer la qualité et donc de ce fait la rapidité des mes requetes sql.

J'ai donc put voir qu'il faillait mettre en place des indexes.
Je prends pour exemple une de mes requetes:
$sql = 'SELECT id_simply_user, id_loisirs, id_departements, id_type_loisirs, genre_loisir, url_rewrite, photo, url_fnac, titre, date_debut_sortie, description, city, manufacturer, heart FROM loisirs JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE  loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';

// region
  if(!empty($_REQUEST['region'])){
    $sql .= ' AND regions.url = \''.$_REQUEST['region'].'\'' ;
  }

$sql .= "ORDER BY loisirs.id_loisirs  DESC LIMIT ".intval(($page-1)*$parPage).", ".$parPage ;;
Pour le coup sur cette requete j'ai donc selectionné uniquement les champs voulu et fait un tri par odre d'id_loisirs en les affichant donc plus recent au plus ancien.
Avec cette histoire d'indexe pour améliorer la rapidité je ne vois pas ce que je peut faire de mieu.
Voici la strucutre de cette table (loisirs)

--
-- Structure de la table `loisirs`
--

CREATE TABLE IF NOT EXISTS `loisirs` (
`id_simply_user` int(11) NOT NULL,
`id_loisirs` int(11) NOT NULL AUTO_INCREMENT,
`nb` tinyint(4) NOT NULL,
`id_region` int(2) NOT NULL,
`id_departements` varchar(3) NOT NULL,
`valeur_departement` varchar(255) NOT NULL,
`id_type_loisirs` int(11) NOT NULL,
`genre_loisir` varchar(255) NOT NULL,
`url_rewrite` varchar(255) NOT NULL,
`photo` varchar(255) NOT NULL,
`url_fnac` text NOT NULL,
`titre` varchar(255) NOT NULL,
`date_debut_sortie` datetime NOT NULL,
`horaire_debut` varchar(50) NOT NULL,
`date_fin_sortie` datetime DEFAULT NULL,
`horaire_fin` varchar(6) NOT NULL,
`jour_semaine` varchar(255) NOT NULL,
`description` text NOT NULL,
`phone` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`website` varchar(255) DEFAULT NULL,
`street` varchar(255) DEFAULT NULL,
`postcode` int(5) unsigned zerofill DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`horraire` varchar(5) NOT NULL,
`price` text,
`number` varchar(50) NOT NULL,
`manufacturer` text NOT NULL,
`heart` tinyint(4) NOT NULL,
`valide` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_loisirs`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Mammouth du PHP | 643 Messages

16 août 2016, 07:05

PS: Je suis à lécoute si je peut améliorer cette requete également autrement :p

Eléphant du PHP | 51 Messages

16 août 2016, 12:48

Cette partie me semble complexe :
JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region`
Sans rentrer dans le détail, voir 3 champs aux noms aussi semblables (region ; region_id ; id_region) me semble bizarre.

Mammouth du PHP | 643 Messages

16 août 2016, 17:12

Complexe peut etre mais simple dans la logique.
Mais je ne pense pas que le problème temps de réponse vient de cette partiie la