  | 
  
Vous pouvez accélerer le traitement et minimiser l'espace de stockage d'une table en utilisant les techniques suivantes :
 
- Déclarez mes colonne comme 
NOT NULL si possible. Cela accélère l'ensemble, et vous économisez un bit par colonne
 - Profitez du fait que toutes les colonnes ont une valeur par défaut. Insérez les valeurs explicitement uniquement lorsque la valeur insérée diffère de la valeur par défaut. Vous n'avez ainsi pas besoin d'affecter de valeur à la première colonne de type 
TIMESTAMP ou de type AUTO_INCREMENT lors d'une commande INSERT.
  mysql_insert_id().
 - Utilisez autant que possible la plus petite taille d'entier. Les tables en seront réduites d'autant. Par exemple, 
MEDIUMINT est souvent plus efficace que INT.
 - Si vous n'avez pas de colonne de longueur variable (
VARCHAR, TEXT ou BLOB), la ligne est de longueur fixe. Cela nettement plus rapide, mais cela peut gaspiller un peu de place .
  10.17  Quel sont les différents formats de lignes? Quand utiliser VARCHAR/CHAR?.
 - Pour aider MySQL à optimisez les requêtes, utilisez 
isamchk --analyze sur une table, après l'avoir chargée avec les données adéquates. Cela met à jours une caractéristiques de la table, qui indique le nombre moyen de ligne qui ont la même valeur. (Pour les index uniques, cette valeur vaudra 1, bien entendu).
 - Pour classer un index et des données en fonction d'un index, utilisez 
isamchk --sort-index --sort-records=1 (pour trier avec l'index 1). Si vous avez un index unique dont vous voulez lire toutes lignes dans l'ordre de l'index, c'est une bonne idée pour accélèrer la requête. Remarquez bien que ce classement n'est pas optimal, et qu'il peut s'avérer long pour une grande table.
 - Pour les commandes 
INSERT, utilisez des insertions multiples. C'est beaucoup plus rapide que de faire des insertions séparées.
 - Lorsque vous chargez des données, utilisez 
LOAD DATA INFILE. Cette commande est généralement 20 fois plus rapide que des commandes INSERT repétées.   LOAD DATA.
Vous pouvez même gagner encore plus de vitesse en chargeant les données dans une table avec de nombreux index en utilisant la procédure suivante : 
  
- Créez une table avec 
mysql ou Perl avec CREATE TABLE.
 - Exécutez 
mysqladmin flush-tables.
 - Utilisez 
isamchk --keys-used=0 -rq /path/to/db/nom_table. Cela va effacer tous les index de cette table.
 - Insérez les données dans la table avec 
LOAD DATA INFILE.
 - Si vous avez 
pack_isam et voulez compresser les tables, lancez pack_isam.
 - Recréez les index avec 
isamchk -r -q /path/to/db/nom_table.
 - Exécutez 
mysqladmin flush-tables.
  
 
- Pour gagner un peu de vitesse avec 
LOAD DATA INFILE et INSERT, agrandissez le buffer de clés. Cela peut se faire avec l'option -O key_buffer=# option de mysqld ou safe_mysqld. Par exemple, 16M est une bonne valeur si vous disposez de beaucoup de RAM
 - Lorsque vous créez des textes d'exportation pour les réutilisez dans d'autres programmes, utilisez 
SELECT ... INTO OUTFILE. Reportez vous à la section   LOAD DATA.
 - Lorsque vous faites des insertions ou des modifications nombreuses et successives, vous pouvez gagner de la vitesse en verrouillant la table avec 
LOCK TABLES. LOAD DATA INFILE et SELECT ...INTO OUTFILE sont atomique, ce qui rend inutile l'utilisation de LOCK TABLES lors de leur utilisation.   LOCK TABLES.
  
Pour vérifier l'état de fragmentation de vos tables, utilisez isamchk -evi sur le fichier``.ISM''. Reportez vous à la section   13  Maintenance d'un serveur MySQL
 
 |