08-06-2007, 12:02 PM
On utilise son cerveau.
L'optimisation d'une table passe par des tests de performances (sur un grand nombre de requêtes), un bon choix des types de colonnes, etc.
Ensuite la grosse partie de l'optimisation se fait dans les requêtes. Par une clause SELECT efficace (qui prend seulement ce dont elle à besoin), dans l'utilisation de jointures, de sous-requêtes, de variables utilisateurs, de fonctions spéciales.
Ensuite il faut choisir ce qui sera fait par SQL ou par PHP :
Par exemple, on voit souvent des gens utiliser une colonne de type BIGINT pour stocker un timestamp (issu de la fonction time() de PHP) dans une table au moment de l'INSERT. Puis qui passent par les fonctions de PHP pour formater une date à partir de ce timestamp. Le mieux étant de faire une colonne de type TIMESTAMP et de lui donner la constante CURRENT_TIMESTAMP, de manière à attribuer par défaut (sans rien faire) et à tout nouvel enregistrement le timestamp actuel (au format SQL), qui ressemble à 2007-05-30 22:21:02.
Il faut connaître les fonctions SQL, comme DATE_FORMAT(), qui s'utilise dans la clause SELECT et qui permet de faire les choses proprement en formatant la date dans un champ aliasé.
Exemple :
L'optimisation d'une table passe par des tests de performances (sur un grand nombre de requêtes), un bon choix des types de colonnes, etc.
Ensuite la grosse partie de l'optimisation se fait dans les requêtes. Par une clause SELECT efficace (qui prend seulement ce dont elle à besoin), dans l'utilisation de jointures, de sous-requêtes, de variables utilisateurs, de fonctions spéciales.
Ensuite il faut choisir ce qui sera fait par SQL ou par PHP :
Par exemple, on voit souvent des gens utiliser une colonne de type BIGINT pour stocker un timestamp (issu de la fonction time() de PHP) dans une table au moment de l'INSERT. Puis qui passent par les fonctions de PHP pour formater une date à partir de ce timestamp. Le mieux étant de faire une colonne de type TIMESTAMP et de lui donner la constante CURRENT_TIMESTAMP, de manière à attribuer par défaut (sans rien faire) et à tout nouvel enregistrement le timestamp actuel (au format SQL), qui ressemble à 2007-05-30 22:21:02.
Il faut connaître les fonctions SQL, comme DATE_FORMAT(), qui s'utilise dans la clause SELECT et qui permet de faire les choses proprement en formatant la date dans un champ aliasé.
Exemple :
Code PHP :
<?php
$s_requete = sprintf("
SELECT id, nom, DATE_FORMAT(date_inscription, '%%e.%%m.%%Y') AS date_inscription FROM comptes
WHERE id=%d AND confirmation=%d AND administration=%d",
$_SESSION['id_compte'],
1,
1
);
Qui me renvoie (entre autre) une date au format : 30.05.2007
Il ne faut pas avoir peur de faire travailler SQL, c'est souvent plus rapide que PHP, et surtout bien plus propre, et c'est alors la performance globale de votre application qui progressera.
Pour un aperçu des fonctions SQL : Developpez.com - Les fonctions dans SQL
Sephi-Chan, voila, ça peut toujours servir de le rappeler