Ich habe zwei MySQL-Abfragen, die beide Daten in eine Tabelle einfügen. Beide haben das folgende Format:Vereinen Sie zwei MySQL-Abfragen mit einer UNION oder programmatisch
CREATE TABLE IF NOT EXISTS `data` (
`id` BIGINT NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`id`)
)
SELECT `field1`, `field2`
WHERE `active` = 1
Die einzigen Unterschiede zwischen den beiden Abfragen sind wie field1
und field2
bestimmt sind, und einige kleinere Unterschiede in den Bedingungen Klausel. Beide laufen bis zu 12.000 und mehr Datensätze.
Nun, was effizienter sein wird: separat
A. Führen Sie beide Abfragen:
if (mysql_query($query1)) {
return mysql_query($query2);
}
return false;
B. OR verbinden die zwei Abfragen mit einer UNION und führen einmal:
$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)
Die Daten von der einen Abfrage sind nutzlos ohne die Daten von der anderen, also müssen beide erfolgreich sein. DO_ONE
und DO_TWO
sind benutzerdefinierte MySQL-Funktionen, die die Felddaten gemäß einiger Spezifikationen ändern.
zumindest oberflächlich, es sieht aus, als ob Sie aus früheren Läufen der Abfragen, wenn Ihre Zieltabelle existiert bereits erhalten links über Abschaum werden. Da Sie über einen automatisch generierten Primärschlüssel verfügen, können Sie auch so lange neue Datensätze in die Tabelle einfügen, wie Sie möchten (Ihnen bleibt wahrscheinlich der Speicherplatz vor dem Auslaufen der Zahlen erspart). –
Die UNION-Version gewährleistet keine doppelten Datensätze in der Ergebnismenge. die separate Abfrage Version nicht. Nun, die "id" -Spalte stellt tatsächlich sicher, dass die Datensätze alle unterschiedlich sind, aber es könnten wiederholte Datensätze mit denselben Daten in den anderen Spalten (aber unterschiedlichen ID-Werten) vorkommen. Das ist wahrscheinlich wichtig - benutze UNION. –