optimisation requete sql

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

achaternet
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 256
Inscription: 11 Fév 2003

optimisation requete sql

Message le Mar Aoû 17, 2004 17:57

'soir,

Mon objectif est de remplacer plusieurs requetes imbriquées , donc trop lourde en 1 seul

<?

$partb="SELECT nom FROM chps_select";
$result = mysql_query ($partb,$db);

while($namme=mysql_fetch_object($result))
{
$nmtb=$namme->nom;

$query_titres="SELECT nom,url FROM `".$nmtb."` GROUP BY nom";
$result_titres = mysql_query ($query_titres,$db);

while ($lign=@mysql_fetch_object($result_titres))
{
$chainus=$lign->nom;
$kurl=$lign->url;
...
}
}

?>

L objectif etant de parcourir le contenu de toutes les tables indiqué par le parcours de la table chps_slect.

Comment coder la requete :roll: ?

Merci


XenonDelee
WRInaute impliqué
WRInaute impliqué
 
Messages: 923
Inscription: 6 Avr 2004

Message le Mar Aoû 17, 2004 20:39

la syntaxe INNER JOIN ??? :roll:

Code: Tout sélectionner
SELECT table1.*,table2.* FROM table1 INNER JOIN table2 ON champs_table1=champs_table2  ....



Bon courage,

A+

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Mar Aoû 17, 2004 21:37

Xenon dit vrai (enfin dis nous si ça marche) mais j'ai pas l'impression que la structure de tes tables soit au point. Faire 1 table par catégorie c'est pas bon du tout.

Pense aussi à utiliser le moins de variables possibles, c'est trop lourd pour rien :

Code: Tout sélectionner
<?
$result = mysql_query ("SELECT table1.*,table2.* FROM table1 INNER JOIN table2 ON champs_table1=champs_table2");

while ($lign=@mysql_fetch_array($result))
{
echo $lign['nom'];
echo $lign['url'];
// ça , en dessous, oublie ça sert à rien : tu doubles la mémoire utilisée pour des prunes.
// c'est comme si tu commandais 2 pizzas et qu'à la livraison, tu mettais au four 2 surgelées ...
//$chainus=$lign->nom;
//$kurl=$lign->url;
...

}

?>


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Mar Aoû 17, 2004 22:21

Euh si le nom de la table est dynamique (cf ton "select xxx from $variable"), t'es franchement mal barré pour tenter d'optimiser quoi que ce soit...

achaternet
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 256
Inscription: 11 Fév 2003

Message le Mar Aoû 17, 2004 22:46

Je vois un peu ou vous voulez en venir,
mais en reprenant par rapport au contexte, je bloque:

chps_select est table1 (qui est fixe)

$nmtb est table2 (qui est variable) resultant du contenu de la colonne nom de la table chps_select

En reprenant avec INNER JOIN :

SELECT chps_select.nom, $nmtb.nom,$nmtb.url FROM chps_select INNER JOIN $nmtb.* ON nom=nom



Code: Tout sélectionner

CREATE TABLE `chps_select` (
  `nom` varchar(35) NOT NULL default '',
...
PRIMARY KEY  (`nom`)
) TYPE=MyISAM;




CREATE TABLE `$nmtb` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `nom` varchar(230) default NULL,
...
PRIMARY KEY  (`id`),
  KEY `knom` (`nom`)
) TYPE=MyISAM;



Attention le champs nom n est pas le meme:
`nom` varchar(35) NOT NULL default '', pour chps_select
`nom` varchar(230) default NULL, pour $nmtb

Il faut que je recup le nom et l url par le biai de la table $nmtb resultant du champs nom de la table chps_select.


Kesako :?:

Es ce bien INNER JOIN a utiliser? quelle syntaxe?

Merci

achaternet
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 256
Inscription: 11 Fév 2003

Message le Mar Aoû 17, 2004 23:39

The Jedi a écrit:Faire 1 table par catégorie c'est pas bon du tout.
?>


Tu propose quoi comme structure?


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Mar Aoû 17, 2004 23:48

Classiquement : une seule table pour toutes les catégories, avec un champ identifiant la catégorie concernée.

iconso
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 446
Inscription: 8 Avr 2003

Message le Mer Aoû 18, 2004 0:16

Je ne suis pas sur d'avoir bien compris ton problème mais je crois que c'est l'opérateur UNION dont tu as besoin, si toutes tes tables $nmtb ont bien la meme structure : http://www.nexen.net/docs/mysql/annotee/union.php

Cet opérateur te permettra de récupérer le résultat de toutes tes requetes en une seule table. Par contre ce n'est pas ce que l'on peut appeler de l'optimisation... Dans ton cas je crois effectivement que tu vas devoir sérieusement repenser ta structure de tables. ;-)

Fred

achaternet
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 256
Inscription: 11 Fév 2003

Message le Mer Aoû 18, 2004 0:37

Merci a vous tous.

Je vais travailler dans ce sens...



iconso a écrit:Je ne suis pas sur d'avoir bien compris ton problème mais je crois que c'est l'opérateur UNION dont tu as besoin, si toutes tes tables $nmtb ont bien la meme structure : http://www.nexen.net/docs/mysql/annotee/union.php

Cet opérateur te permettra de récupérer le résultat de toutes tes requetes en une seule table. Par contre ce n'est pas ce que l'on peut appeler de l'optimisation... Dans ton cas je crois effectivement que tu vas devoir sérieusement repenser ta structure de tables. ;-)

Fred


lol, c est effectivement ça, mais c pas top vi. Fred , tu devrais migrer tous tes sites en php plutot que asp :P

iconso
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 446
Inscription: 8 Avr 2003

Message le Mer Aoû 18, 2004 1:02

achaternet a écrit:Fred , tu devrais migrer tous tes sites en php plutot que asp :P

Mouarf... pas de troll STP :-)

Fred


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Mer Aoû 18, 2004 7:32

bah... il y a bien les tables "MERGE" sinon... mais ce n'est pas vraiment ça qui résoudra le problème.

achaternet
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 256
Inscription: 11 Fév 2003

Message le Mer Aoû 18, 2004 20:25

Dit moi iconso, sur i-comparateur, tu as fait quelle struture de tes diverses tables concernant tes produits :?: :?:

iconso
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 446
Inscription: 8 Avr 2003

Message le Mer Aoû 18, 2004 21:27

Pour les produits, une seule table suffit. Il te faudra au minimum des colonnes comme produitID, siteID (clef externe vers une table site contenant le nom du site, etc..), nom, prix. Ensuite tu peux ajouter diverses infos selon tes besoins dans ta table "produits" : les frais de port, la catégorie, etc... Une bonne structure de tables est vraiment indispensable pour un comparateur de prix : ca ne fait pas tout, mais c'est un point de départ indispensable.

Tiens d'ailleurs contrairement à ceux que certains peuvent penser : i-Comparateur n'utilise aucune technique de mise en cache, ou de pré-génération des pages HTM en dur : c'est du 100% live, à chaque page loadée.

Fred


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Mer Aoû 18, 2004 23:11

iconso a écrit:Tiens d'ailleurs contrairement à ceux que certains peuvent penser : i-Comparateur n'utilise aucune technique de mise en cache, ou de pré-génération des pages HTM en dur : c'est du 100% live, à chaque page loadée.


Tiens donc... Petite curiosité alors : pourquoi ce choix ?

iconso
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 446
Inscription: 8 Avr 2003

Message le Mer Aoû 18, 2004 23:44

Bool a écrit:Tiens donc... Petite curiosité alors : pourquoi ce choix ?

Le cache peut être utilisé pour combler certaines lacunes de complexité d'exécution des requêtes. Par contre s'il est utilisé pour cela, la première personne qui interroge ta page une fois ton cache expiré va attendre pour les autres.... C'est un moindre mal c'est certain, mais bon.. ;-)

Ce qui caractérise souvent les comparateurs, c'est un grand nombre de pages, et donc uen importante dispertion des visites. Je ne connais pas le nombre de pages qui sont vues une seule fois dans la journée, mais il doit être assez important : l'intérêt du cache dans ce cas, c'est néant, pour ne pas dire pénalisant.

Dans tous les cas, il vaut mieux favoriser la vitesse naturelle d'un site, sans tenir compte de la capacité de mise en cache (qui pourra par contre représenter une possibilité pour augmenter la capacité d'accueil sur le meme matos) : c'est ce que j'ai essayé de faire.

Sinon le cache n'a pas que des avantages, surtout sur des sites comme les comparateurs, qui devraient pouvoir en théorie être remis à jour plusieurs fois par jour (ce qui en réalité est difficile, beaucoup de marchands imposant de "taper" dans leurs bases que dans les heures creuses). Le live te permet d'apporter des modifications dans les prix sans avoir à te soucier du moment ou elles seront répercutées sur le site.

Fred

optimisation requete sql

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité