Hallo,
es geht darum ein Teil meines Scriptes zu optimieren, da es extrem lange Laufzeiten hat. Es gibt bestimmt ein besserer Lösung nur fällt diese mir einfach nicht ein.
Es gibt zwei Tabellen. Tabelle A wird regelmäßig ausgelesen und dann in Tabelle B zusammengafasst und wieder gelöscht.
Also jetzt mal im Detail:
Tabelle A:
[ID] [A] [B]
Tabelle B:
[ID] [A] [B] [COUNT]
So jetzt habe ich im Schnitt in der Tabelle A 5000 Einträge, von denen mehrer doppelt vorkommen.
Ich möchte nun in Tabelle B eine Übersicht haben, welche Kombinationen vorkommen und wie oft. Es kommen bei jedem Durchgang ca. 1000 bis 2000 bekannt Kombinationen vor und der Rest sind neue. Daher hat Datenbank B dementsprechend viele Einträge. Hier meine momentane Lösung:
es geht darum ein Teil meines Scriptes zu optimieren, da es extrem lange Laufzeiten hat. Es gibt bestimmt ein besserer Lösung nur fällt diese mir einfach nicht ein.
Es gibt zwei Tabellen. Tabelle A wird regelmäßig ausgelesen und dann in Tabelle B zusammengafasst und wieder gelöscht.
Also jetzt mal im Detail:
Tabelle A:
[ID] [A] [B]
Tabelle B:
[ID] [A] [B] [COUNT]
So jetzt habe ich im Schnitt in der Tabelle A 5000 Einträge, von denen mehrer doppelt vorkommen.
Ich möchte nun in Tabelle B eine Übersicht haben, welche Kombinationen vorkommen und wie oft. Es kommen bei jedem Durchgang ca. 1000 bis 2000 bekannt Kombinationen vor und der Rest sind neue. Daher hat Datenbank B dementsprechend viele Einträge. Hier meine momentane Lösung:
PHP-Code:
$abfrage = mysql_query
("
SELECT A, B, Count(A)
FROM Tabelle A
GROUP BY A, B
") OR die(mysql_error());
while($row = mysql_fetch_array($abfrage))
{
$abfrageb = mysql_query
("
SELECT ID
FROM Tabelle B
WHERE A = '$row[0]' AND B = '$row[1]'
");
$rowb = mysql_fetch_array($abfrageb);
if($rowb[0] != '')
{
mysql_query("
UPDATE Tabelle B
SET COUNT = COUNT + '$row[2]'
WHERE (ID ='$rowb[0]')
") OR die(mysql_error());
}
else
{
mysql_query("
INSERT INTO Tabelle B (A, B, COUNT)
VALUES ('$row[0]', '$row[1]', '$row[2]')
") OR die(mysql_error());
}
}
Kommentar