2017-12-11 1 views
0

Für meine Bachelorarbeit Ich habe ein Passwort Leck zu analysieren, und ich habe eine Tabelle mit zwei Spalten MEMBER_EMAIL und MEMBER_HASHBerechnung Frequenz von Passwort-Hashes effizient in MySQL

Ich mag die Frequenz jedes berechnen Hash effizient

Damit die Ausgabe wie folgt aussieht:

 
Hash | Amount 
---------------- 
2e3f.. | 345 
2f2e.. | 288 
b2be.. | 189 

Meine Frage war bisher einfach:

SELECT MEMBER_HASH AS hashed, count(*) AS amount 
FROM thesis.fulllist 
GROUP BY hashed 
ORDER BY amount DESC 

Während es für kleinere Tabellen funktioniert gut, ich habe Probleme bei der Abfrage auf die gesamte Liste der Berechnung (112 mio. Einträge), wo es mich über 2 Tage dauert, endet in einem seltsamen Verbindung Timeout-Fehler, auch wenn meine Einstellungen in Ordnung sind.

Also frage ich mich, ob es einen besseren Weg zu berechnen gibt (wie ich nicht wirklich an irgendwelche denken kann), wäre jede Hilfe zu schätzen!

+1

GROUP BY kann die Verwendung von Indizes machen, wird 'hashed' indiziert? –

+0

Danke für den Vorschlag, nur die Kombination von beiden Spalten und MEMBER_EMAIL wurde indiziert, whoops! Ich muss es versuchen, danke! – Kuro95

Antwort

1

Ihre Abfrage kann nicht optimiert werden, da sie sehr einfach ist. Die einzige Möglichkeit, die Art der Ausführung der Abfrage zu verbessern, besteht darin, den "MEMBER_HASH" zu indizieren.

Dies ist, wie Sie es tun können:

ALTER TABLE `table` ADD INDEX `hashed` (`MEMBER_HASH`); 
+0

Dachte so! Ich versuche es (da ich es noch nicht indiziert habe), melde mich wieder! Danke bis jetzt. – Kuro95

+0

Es schien, als ob es perfekt funktioniert! Jetzt brauche ich nur 30 min statt der 2 Tage, vielen Dank! – Kuro95

+0

Index ist fast die ganze SQL Magie;) –