Maison > Article > base de données > Introduction pertinente aux performances d'insertion d'optimisation MySQL
Syntaxe des instructions d'insertion MySQL
insert into `table`(`field1`,`field2`) values('value1','value2');
Méthodes pour améliorer les performances d'insertion
1 . Une instruction SQL pour insérer plusieurs éléments de données
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1);
peut être écrite comme
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0), ('userid_1', 'content_1', 1);
2 .Utiliser les transactions
START TRANSACTION; INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1); ... COMMIT;
Remarque
1 Il y a une limite sur la longueur des instructions SQL, veuillez faire attention lors de la fusion de SQL. déclarations. La limite de longueur peut être modifiée via l'élément de configuration max_allowed_packet, et la valeur par défaut est 1M.
2. Si une transaction est trop volumineuse, cela affectera l'efficacité de l'exécution. MySQL a l'élément de configuration innodb_log_buffer_size. Si cette valeur est dépassée, les données du disque seront utilisées, ce qui affectera l'efficacité de l'exécution.
Description de l'élément de configuration sur les transactions :
innodb_buffer_pool_size
Si vous utilisez Innodb, alors il s'agit d'une variable importante. Comparé à MyISAM, Innodb est plus sensible à la taille du tampon. MySIAM peut utiliser la valeur par défaut key_buffer_size pour de grandes quantités de données, mais Innodb semble lent lorsqu'il utilise la valeur par défaut pour de grandes quantités de données. Le pool de tampons d'Innodb mettra en cache les données et les index, il n'est donc pas nécessaire de laisser de l'espace pour le cache système. Si vous utilisez uniquement Innodb, vous pouvez définir cette valeur sur 70 à 80 % de la mémoire. Comme key_buffer, si la quantité de données est relativement faible et n'augmente pas beaucoup, ne définissez pas cette valeur trop élevée pour augmenter l'utilisation de la mémoire.
innodb_additional_pool_size
L'effet de ceci n'est pas très évident, du moins lorsque le système d'exploitation peut allouer raisonnablement de la mémoire. Mais vous devrez peut-être toujours le définir sur 20 Mo ou plus pour voir combien de mémoire Innodb allouera à d'autres utilisations.
innodb_log_file_size
est très important lorsque l'on écrit beaucoup, en particulier de grandes quantités de données. Notez que les fichiers plus volumineux offrent de meilleures performances, mais la récupération de la base de données prendra plus de temps. J'utilise généralement 64M-512M, selon l'espace du serveur. innodb_log_buffer_size
La valeur par défaut convient à la plupart des applications avec des opérations d'écriture moyennes et des transactions courtes. Si vous mettez à jour fréquemment ou utilisez beaucoup de données blob, vous devez augmenter cette valeur. Mais s'il est trop volumineux, c'est aussi un gaspillage de mémoire, car il videra toujours (comment dit-on ce mot en chinois ?) une fois par seconde, il n'est donc pas nécessaire de le régler à plus d'une seconde. 8M-16M devraient généralement suffire. Les petites applications peuvent être définies plus petites. innodb_flush_log_at_trx_commit
Vous vous plaignez qu'Innodb est 100 fois plus lent que MyISAM ? Alors vous avez probablement oublié d'ajuster cette valeur. La valeur par défaut de 1 signifie que chaque validation de transaction ou instruction en dehors de la transaction doit écrire le journal sur le disque dur (vidage), ce qui prend beaucoup de temps. Surtout lorsque vous utilisez un cache sauvegardé par batterie (Cache sauvegardé par batterie). Le définir sur 2 convient à de nombreuses applications, en particulier celles transférées depuis les tables MyISAM. Cela signifie ne pas écrire sur le disque dur mais écrire dans le cache système. Les journaux sont toujours vidés sur le disque toutes les secondes, vous ne perdrez donc généralement pas plus de 1 à 2 secondes de mises à jour. Le définir sur 0 sera plus rapide, mais la sécurité est médiocre. Même si MySQL raccroche, les données de transaction peuvent être perdues. alors qu'une valeur de 2 ne fonctionnera que sur l'ensemble du système d'exploitation
Les données peuvent être perdues uniquement en cas de blocage. Cet article explique l'introduction pertinente sur l'optimisation des performances d'insertion de MySQL. Pour plus d'informations, veuillez prêter attention au site Web PHP chinois.
Recommandations associées :
Comment utiliser les méthodes personnalisées courantes de PHP
Comment utiliser le cryptage OR exclusif (XOR) via php / Décrypter le fichier
Comment obtenir le nom d'une variable via php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!