Indexes sur tables en base

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Indexes sur tables en base

Re: Indexes sur tables en base

par yoann38 » 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

Re: Indexes sur tables en base

par J-Nicolas » 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.

Re: Indexes sur tables en base

par yoann38 » 16 août 2016, 07:05

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

Indexes sur tables en base

par yoann38 » 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 ;