Maison > base de données > tutoriel mysql > Partagez des conseils sur l'optimisation de l'insertion dans les déclarations

Partagez des conseils sur l'optimisation de l'insertion dans les déclarations

零下一度
Libérer: 2017-05-18 15:49:33
original
3351 Les gens l'ont consulté

Base de données d'insertion par lots MYSQL pour implémenter l'analyse des performances des instructions

Supposons que notre structure de table est la suivante

Le code est le suivant

CREATE TABLE example (
example_id INT NOT NULL,
name VARCHAR( 50 ) NOT NULL,
value VARCHAR( 50 ) NOT NULL,
other_value VARCHAR( 50 ) NOT NULL
)
Copier après la connexion

Normalement, nous insérerons une seule instruction SQL Écrivez comme ceci :

Le code est le suivant

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1');
Copier après la connexion

MySQL nous permet d'insérer par lots des données dans une instruction SQL, comme suit :

Le code est le suivant

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');
Copier après la connexion

Si l'ordre des colonnes que nous insérons est cohérent avec l'ordre des colonnes dans le tableau, nous pouvons également omettre la définition des noms de colonnes, comme suit sql

Le code est le suivant

INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');
Copier après la connexion

Ce qui précède ne ressemble à rien. Question, permettez-moi d'utiliser quelques conseils pour l'optimisation des instructions SQL. Je vais les tester séparément ci-dessous. de données dans une table de données vide

La première méthode : utilisez insert dans Insert, le code est le suivant :

$params = array('value'=>'50');
set_time_limit(0);
echo date("H:i:s");
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date("H:i:s");
Copier après la connexion

L'affichage final est : 23 : 25:05 01:32:05, ce qui signifie que cela a pris plus de 2 heures !

La deuxième méthode  : utilisez la soumission de transaction pour insérer par lots dans la base de données (soumettez tous les 100 000 éléments). La dernière heure affichée est : 22:56:13 23:04:00, soit un total de 8 minutes et 13 secondes. Le code est le suivant :

echo date("H:i:s");
$connect_mysql->query(&#39;BEGIN&#39;);
$params = array(&#39;value&#39;=>&#39;50&#39;);
for($i=0;$i<2000000;$i++){ 
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(&#39;COMMIT&#39;);
$connect_mysql->query(&#39;BEGIN&#39;);
}
}
$connect_mysql->query(&#39;COMMIT&#39;);
echo date("H:i:s");
Copier après la connexion

La troisième méthode. : Utilisez des instructions SQL optimisées : divisez les instructions SQL, utilisez les valeurs insert into table() (),(),(),() puis insérez-les toutes en même temps, si la chaîne est trop longue,

, vous devez configurer MYSQL et exécuter dans la ligne de commande mysql : set global max_allowed_packet = 2*1024*1024*10 ; le temps de consommation est : 11:24:06 11:25 :06;

Il n'a fallu qu'1 minute pour insérer 2 millions de données de test ! Le code est le suivant :

$sql= "insert into twenty_million (value) values";
for($i=0;$i<2000000;$i++){
$sql.="(&#39;50&#39;),";
};
$sql = substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);
Copier après la connexion

Enfin, pour résumer, lors de l'insertion de gros lots de données, la première méthode est sans aucun doute la plus efficace. Mauvaise, mais la deuxième méthode est plus largement utilisée dans les applications pratiques. La troisième méthode est plus adaptée lors de l'insertion de données de test ou d'autres exigences faibles, et elle est très rapide.

[Recommandations associées]

1. Partagez un didacticiel pour insérer plusieurs enregistrements par lots à l'aide d'une instruction d'insertion

2 Analyse courante. utilisé mysql Trois types d'instructions d'insertion et leurs différences

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!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal