J'ai deux requêtes MySQL qui à la fois insèrent des données dans une table. Tous les deux ont le format suivant:Unite deux requêtes MySQL avec UNION ou par programme
CREATE TABLE IF NOT EXISTS `data` (
`id` BIGINT NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`id`)
)
SELECT `field1`, `field2`
WHERE `active` = 1
Les seules différences entre les deux requêtes sont comment field1
et field2
sont déterminés, et quelques différences mineures dans la clause de conditions. Les deux courent jusqu'à 12K et plus d'enregistrements.
Maintenant, ce sera plus efficace:
A. Exécuter les requêtes séparément:
if (mysql_query($query1)) {
return mysql_query($query2);
}
return false;
B. OU combiner les deux requêtes avec UNION, et exécuter une fois:
$query = 'SELECT `field1`, `field2` WHERE `active` = 1
UNION
SELECT DO_ONE(`field1`), DO_TWO(`field2`) WHERE `active` = 1
ORDER BY `field1`';
return mysql_query('CREATE TABLE IF NOT EXISTS `data` (
`id` BIGINT NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`id`)
) ' . $query)
Les données de l'une requête est inutile sans les données de l'autre, donc les deux doivent réussir. DO_ONE
et DO_TWO
sont des fonctions MySQL définies par l'utilisateur qui modifient les données de champ en fonction de certaines spécifications.
Au moins superficiellement, il semble que vous obtenez gauche plus bas-fonds de séries précédentes des requêtes si votre table cible existe déjà. De plus, comme vous disposez d'une clé primaire générée automatiquement, vous pouvez continuer à insérer de nouveaux enregistrements dans la table aussi longtemps que vous le souhaitez (vous n'aurez plus besoin d'espace disque avant de manquer de nombres). –
La version UNION n'assure aucun enregistrement en double dans le jeu de résultats. la version des requêtes séparées ne le fait pas. Eh bien, la colonne 'id' assure en fait que les enregistrements seront tous distincts, mais il pourrait y avoir des enregistrements répétés avec les mêmes données dans les autres colonnes (mais des valeurs d'id différentes). Cela compte probablement - utilisez UNION. –