requete pour optimiser une table

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 : requete pour optimiser une table

par zeus » 22 févr. 2006, 10:27

Autant pour moi Hubert, je ne me suis jamais servi de cette instruction et j'ai essayé de déduire le fonctionnement depuis la doc :oops:

par Invité » 22 févr. 2006, 01:33

ok merci je comprend mieux ce que tu me dit :wink:

sujet resolu :!:

par Hubert Roksor » 22 févr. 2006, 00:54

Je parlais de $table, la variable. Si à chaque appel ($table == 'table_manif') on ne peut pas dire que la variable soit "dynamique", ou même "variable" ;)

par BeRoots » 21 févr. 2006, 23:58

ça oui mais quel rapport avec le fait qu'elle soit réellement dynamique?

par Hubert Roksor » 21 févr. 2006, 23:35

Dans ton exemple, la première requête utilise "table_manif" et la seconde utilise $table donc j'en déduis que ($table == "table_manif") sinon tu aurais utilisé $table dans les deux requêtes... ou le contraire.

par BeRoots » 21 févr. 2006, 23:18

J'ai également remplacé $table par 'manif', car je doute que $table soit réellement dynamique, l'est-elle ?
ma table est une myISAM

qu'entendre par dynamique?

sinon, tout fonctionne à merveille :wink:

par Hubert Roksor » 21 févr. 2006, 22:57

Désolé de te contredire zeus, mais je pense que tu fais erreur. OPTIMIZE "défragmente" les données de la table, et donc remplit les "trous". Il y a visiblement une erreur d'inattention dans la traduction française, voici la même phrase corrigée d'après la version anglaise: (modification visible en italique)
Vous pouvez vous servir de la commande OPTIMIZE TABLE pour récupérer l'espace inutilisé et défragmenter le fichier de données.
Mais comme l'a dit patami, il y a une erreur dans le code, et c'est certainement pour cela qu'il ne fonctionne pas.

Voici une version "corrigée" de ton code, BeRoots:
// on efface les lignes périmees de la table
$sql = "DELETE QUICK FROM table_manif WHERE manif_date < '$verif_date'";
mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on optimise la table
$sql = "OPTIMIZE TABLE table_manif";
mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
Dans cet exemple, je réutilise $sql car c'est une bonne pratique de garder le même nom pour ce genre de variables si tu n'as -bien entendu- pas besoin de récupérer la requête plus loin dans ton script, ce qui m'étonnerait. De plus, ces requêtes ne renvoient pas de résultat, donc inutile de le sauver dans $result. J'ai également remplacé $table par 'manif', car je doute que $table soit réellement dynamique, l'est-elle ?

En dernier, j'ai ajouté l'option QUICK de DELETE.
Pour les tables MyISAM, si vous spécifiez l'option QUICK, le moteur de stockage ne compacte pas les index durant l'effacement, ce qui peut accélérer certains effacements.
...çà tombe bien, OPTIMIZE les compacte et les trie juste après ;)

par patami » 21 févr. 2006, 20:54

en plus de l'inutilité, tu as une erreur dans ton code : regarde le nom de ta variable .. tu as deux fois $sql au lieu d'avoir pour la seconde requête $sql_2

par BeRoots » 21 févr. 2006, 18:40

et si je fait un INSERT depuis un autre script coté administration de mon site?

par zeus » 21 févr. 2006, 18:31

C'est inutile ... tant que tu ne fait pas de INSERT sur cette table

Donc dans ton exemple, avec un DELETE et un OPTIMIZE, c'est inutile. Mais tu aurais rajouté un INSERT à la fin, ca aurait pris un sens.

par BeRoots » 21 févr. 2006, 18:20

donc en claire c'est inutil dans ce cas si j'ai bien compris?

par zeus » 21 févr. 2006, 17:56

Si tu efface des tuples, la table prendra autant de place que sans effacement, mais l'optimisation permet de réutiliser la place utilisée par les lignes effacées lors des prochaines insertions. Mais en aucun cas, la table ne vas diminuer de volume lors d'une optimisation. Elle ne va que stagner lors des prochaines insertions ;)

par BeRoots » 21 févr. 2006, 17:25

il n'y aurai donc pas de raison d'optimiser la table :?

la doc stipule pourtant bien que optimise table compact la table si on a des lignes effacées

je pense donc que ma requete est justifier mais pourquoi je n'ai aucun message d'erreurs et aucune optimisation effectuer?

par zeus » 21 févr. 2006, 16:46

Si j'en crois la doc, les lignes sont libérées mais pas effacées.

C'est à dire qu'elle ne seront écrasées qu'à la prochaine insertion mais pas lors de l'update

par BeRoots » 21 févr. 2006, 16:17

c'est une optimisation d'une table suite à un effacement de donnée périmer qui sera effectuer une fois par jour, à la premiere visite du site (si visite il y a ^^)

je verifie depuis phpmyadmin pour voir si l'optimisation à été faite mais j'ai toujours des pertes dans ma table :cry:

la variable $verif_date à été tesé par echo et m'affiche bien la date d'aujourd'hui au format AAAA-MM-DD