Maison  >  Article  >  base de données  >  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

零下一度
零下一度original
2017-05-18 15:49:333213parcourir

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
)

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');

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');

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');

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");

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");

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);

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!

Déclaration:
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