La requête de la base de données est-elle plus rapide si j'insère plusieurs lignes à la fois ?
comme
INSERT....
UNION
INSERT....
UNION
(J'ai besoin d'insérer 2-3000 lignes)
La requête de la base de données est-elle plus rapide si j'insère plusieurs lignes à la fois ?
comme
INSERT....
UNION
INSERT....
UNION
(J'ai besoin d'insérer 2-3000 lignes)
@RPK. Je suis d'accord avec vous mais je ne connais pas sa source de données. Comme je l'ai déjà écrit, si elle a un fichier, j'utiliserais la syntaxe load data comme le suggère cularis :)
Il est également possible d'utiliser INSERT INTO Table SELECT 1, '14/05/2012', 3 UNION SELECT 2, '05/14/2012', 3
. bien sûr, cela ne sera meilleur que si les valeurs insérées proviennent de tables différentes.
Si vous avez vos données dans un fichier texte, vous pouvez utiliser CHARGER LES DONNÉES DANS LE FICHIER .
Pour charger un tableau à partir d'un fichier texte, utilisez LOAD DATA INFILE. Cette méthode est généralement 20 fois plus rapide que l'utilisation des instructions INSERT.
Optimisation des instructions INSERT
Vous trouverez d'autres conseils sur la façon d'accélérer vos déclarations d'insertion sur le lien ci-dessus.
@Matteo Les doublons seront soit insérés soit rejetés par la base de données en fonction du schéma que vous avez défini.
Il suffit d'utiliser un SELECT
pour obtenir les valeurs de plusieurs lignes des colonnes choisies et mettre ces valeurs dans les colonnes d'un autre tableau en une seule fois. Par exemple, les colonnes "taille" et "prix" des deux tables "test_b" et "test_c" sont remplies avec les colonnes "taille" et "prix" de la table "test_a".
BEGIN;
INSERT INTO test_b (size, price)
SELECT size, price
FROM test_a;
INSERT INTO test_c (size, price)
SELECT size, price
FROM test_a;
COMMIT;
Le code est intégré dans BEGIN
y COMMIT
de ne l'exécuter que lorsque les deux déclarations ont fonctionné, sinon toute l'exécution jusqu'à ce point est retirée.
Comment se présentent les rangs ? Ecrivez-vous directement le SQL sur le MySQL Query Browser ou l'utilisez-vous depuis PHP, C# ou autre ?
Si vous êtes dans ce dernier cas, consultez les liens suivants :
Voici une solution PHP prête à être utilisée avec une table n:m (relation plusieurs à plusieurs) :
// get data
$table_1 = get_table_1_rows();
$table_2_fk_id = 123;
// prepare first part of the query (before values)
$query = "INSERT INTO `table` (
`table_1_fk_id`,
`table_2_fk_id`,
`insert_date`
) VALUES ";
//loop the table 1 to get all foreign keys and put it in array
foreach($table_1 as $row) {
$query_values[] = "(".$row["table_1_pk_id"].", $table_2_fk_id, NOW())";
}
// Implode the query values array with a coma and execute the query.
$db->query($query . implode(',',$query_values));
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
8 votes
UNION est pour les sélections.
1 votes
Comment se présentent les rangs ? Ecrivez-vous directement du SQL sur le MySQL Query Browser ou l'utilisez-vous depuis PHP, C# ou autre ? Si vous êtes dans le dernier cas, consultez les liens suivants : Le moyen le plus rapide d'insérer 100 000 enregistrements Insertions rapides avec plusieurs rangées