Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
La guerre des étoiles
Dans bien trop de développements, on peut voir apparaître des requêtes avec le sélecteur de champs générique "*" (étoile). Seulement, c'est une très mauvaise habitude que de faire des "SELECT *" dans tous les sens.Pourquoi, c'est plus court à écrire, non ?
Oui, en effet, mais c'est aussi mauvais pour les performances de votre application. J'explique :Lorsque vous effectuez une requête sur votre serveur de données, le résultat va transiter sur votre réseau (ou en mémoire partagée). Si votre table contient un grand nombre de champs, ceux-ci vont être transmis à votre application alors qu'ils ne seront pas tous utilisés. Et plus la quantité de données qui transite est importante, plus votre système mettra de temps à répondre.
Cela revient à remplir son chariot de tous les produits du magasin, pour laisser à la caisse ceux dont on n'a pas besoin et payer les autres. Remplir votre chariot risque de vous prendre beaucoup de temps, sans parler de la difficulé à le faire rouler.
Oui, bon, je veux bien, mais quand j'ai vraiment besoin de tous les champs ?
Prenons alors le cas suivant :Vous avez une table listant tous vos membres (nom, prénom). Sur une page, vous affichez la liste de vos membres en utilisant un "SELECT *". Quelques temps plus tard vous proposez à vos utilisateurs un système d'alerte par SMS. Pour cela, vous allez ajouter un champ téléphone sur 10 caractères. Désormais on en revient au point précédent, c'est à dire que lors de l'affichage des membres, vous n'utilisez pas le numéro de téléphone (heureusement) et vous faites donc transiter des données qui ne seront pas utilisées. Imaginez que vous avez 500 membres, la quantité de données inutiles sera donc de 5.000 octets. En multipliant ça par le nombre de requêtes/jour, cela peut représenter un gâchis important.
Pour certaines tables, je suis certain de ne pas évoluer !
Là arrive pour moi le réel argument allant contre l'utilisation du "SELECT *" ! Ce n'est pas trop une question d'évolutivité ou de performance, mais plutôt une question de lisibilité et de rigueur. En effet, lorsque vous relisez un code contenant un "SELECT *", à moins de connaître par coeur la structure de votre table, vous êtes dans l'incapacité de savoir ce que retourne la requête. Indiquez les champs que vous utilisez, c'est garantir que votre code reste lisible et donc maintenable par les autres, et aussi par vous-même.Ecrire "SELECT *" est synonyme pour moi de "Je suis faignant, je ne sais pas trop ce qu'il y a dedans, et de toute façon, on s'en fout !"
La guerre des étoiles commence, et l'empire de la rigueur contre attaque !
Par Frédéric Bouchery
