2010-04-23 4 views
4

Une chose que je me demande toujours quand j'écris une requête est que j'écris la requête la plus optimisée ou non? Je sais que certaines choses comme:à faire et à ne pas faire pour écrire des requêtes mysql

1) en utilisant SELECT champ1, filed2 au lieu de SELECT *

2) Donner des indices propres aux tables

mais je suis sûr qu'il ya plus de choses qui doivent être gardés dans esprit pour écrire des requêtes, puisque la plupart de la base de données ne peut que croître plus et une requête optimale aidera dans le temps d'exécution. Pouvez-vous partager quelques conseils et astuces sur l'écriture de requêtes?

+4

cette question devrait être Wiki de la communauté – Axarydax

Répondre

2
  • Utilisez les types de données approprié pour vos champs
  • Utilisez le caractère rétro-tique (`) des mots-clés réservés
  • Lorsque vous traitez avec plusieurs tables, essayez d'utiliser rejoint

ressources:

Voir:

20 SQL Tips

3

Le test est le meilleur moyen de mesurer les performances. Surveiller vos requêtes sur la base de données en direct et faire usage de choses comme le slow query log.

Je recommande également permettre à l'query cache, qui donnera des situations d'utilisation les plus typiques d'un énorme coup de pouce.

+0

Ouais rikh qui semble gr8, mais je me demandais s'il y a une meilleure requête et son même pas rare de notre esprit. – nik

1

En fait, aucune "astuce" ne peut vous aider.
La conception de la base de données requiert des connaissances approfondies et non des astuces.

Il y a toujours "poids" de ces "ne sont pas". La plupart de ces listes tombent à la liste des choses les plus insignifiantes et omettent de mentionner les plus importantes. Votre liste par exemple, si elle était le forum culinaire:

  1. Utilisez toujours un couteau à manche noir
  2. Pour préparer un bon plat que vous devez choisir les ingrédients appropriés.

Le premier est impressionnant mais n'aide jamais dans le monde réel.
Deuxième est juste, mais doit être soutenu avec une profonde connaissance pour le faire correctement. Donc, ce doit être un livre, pas des pourboires. Ceux de Paul Dubios sont parmi les recommandés.

+0

"Tout ce que je demande, c'est que les personnes puissantes répondent honnêtement aux questions, et si elles ne le peuvent pas, expliquez pourquoi." - Bill O'Reilly – erisco

1

utilisation ci-dessous les champs nécessairement dans chaque tableau

tablename_id(auto increment , unsigned zerofill) 
created_by(timestamp) 
tablerow_status(enum ('t','f') by default set 't') 
  1. toujours faire un commentaire quand u créer un champ dans une base MySQL (il aide quand u recherche dans phpmyadmin))
  2. prendre alwayz soin des formes Normalization
  3. Si vous faites un champ qui serait toujours positif, sélectionnez unsigned.
  4. utilisation type de données décimales au lieu de flotter dans somw cas (comme escompte, il devrait être au maximum 99,99% utilisent donc décimal (5,2)
  5. date d'utilisation, le temps type de données whereve nécessaire, ne pas utiliser l'horodatage partout
1

sous-requêtes corrélés sont très mauvais, mais souvent mal compris et finissent dans la production. Ils peuvent souvent être résolus en utilisant les tables dérivées et une jointure au lieu. http://en.wikipedia.org/wiki/Correlated_subquery

0

une chose que je trouve aujourd'hui en ce qui concerne la différence entre COUNT (*) et COUNT (col)

Utiliser COUNT (*) est plus rapide que COUNT (col)

tables MyISAM nombre mises en cache de lignes dans ce tableau, InnoDB ne compte pas de ligne de cache et peut être plus lent sans clause WHERE

Il est Il vaut mieux utiliser la colonne NOT NULL pour MYISAM et innoDB qu'une autre colonne où Null est autorisé.

Plus de détails here

Questions connexes