Frage von Flitzi2016, 41

MySQL MD5 Database Geschwindigkeit?

Hi! Ich habe eine DB mit einer Tabelle: list Mit der Struktur: Siehe Bild.

Dort sind exakt 14.776.336 Einträge drinne.

SELECT count(*) FROM hash.list; ~ 77 Sekunden SELECT * FROM hash.list where plain = "aaaa"; ~~ 94 Sekunden

Kann man das schneller machen?

Hilfe

Antwort
von Fregrin, 17

Ist auf plain ein Index? 
Zudem: muss "plain" wirklich vom Typ Text sein? Wenn du nur kurze Zeichenketten drin speicherst reicht evtl Varchar. MD5 und SHA1 sind mit "text" fast sicher mit falschem Typ angelegt.

Am schnellsten sollten solche Anfragen werden, wenn du für die Text Felder feste Längen (zB CHAR(100)) angibst. Siehe auch http://dev.mysql.com/doc/refman/5.7/en/static-format.html

Kommt aber eben auf dienen useCase an. Ohne zu wissen, was du in "plain" speicherst ist es schwer das genauer zu beurteilen

Antwort
von wotan38, 5

Das Wichtigste ist, dass auf Datenfelder, auf die man abfrägt oder nach denen man sortiert, man einen Index gelegt hat. Einen Index kann man auch nachträglich legen. Entscheidend ist natürlich auch, wieviele Treffer es gibt. Das Prinzip des schnellen Findens ist, dass nicht alle Sätze überprüft werden müssen. Vor allem dann, wenn nur eine geringe Anzahl von Treffern erwartet wird. Bei einem optimal für die Suche angelegten Index wird das Ergebnis sofort bereitgestellt, unabhängig von der vorhandenen Gesamtzahl der Sätze. Mein Tipp: Stell Dir vor, Du wärst die Datenbank und müsstest das Gesuchte finden. So findest Du am schnellsten raus, wie es gehen muss. Die Datenbank macht es auch nicht anders. Und Du bekommst ein Gefühl dafür, wenn es mal kompliziertere Abfragen werden.

Antwort
von happyfish2, 9

Index auf plain setzen und beim COUNT() nicht alles nehmen, sondern nur ein Feld, z. B. die id: COUNT(id)

Antwort
von regex9, 18

Des Weiteren könntest du noch sicherstellen, dass deine Datenbank Caching verwendet: http://dev.mysql.com/doc/refman/5.7/en/query-cache.html.

Antwort
von klugshicer, 26

Ja geht und zwar in dem man seine Datenbank von nicht mehr benötigten Datensätzen befreit und nur die Felder selektiert die man gerade wirklich benötigt.

Weitere Optimierungsmöglichkeiten bestehen eventuell darin, das man einen Zeichensatz und eine andere Engine verwendet - aber das lässt sich im Nachhinein nicht ohne weiteres bewerkstelligen.

Kommentar von Flitzi2016 ,

Ok schon mal danke ;), kannst du eine andere Engine näher erleutern?

Kommentar von klugshicer ,

Also ich bin kein Datenbankguru und kenne In Bezug auf MySQL-Engines nur MyISAM und InnoDB.

Man gibt sie bei der Erstellung der Tabellen mit an ob und wie man sie nachträglich andern kann weiß ich nicht. Den Zeichensatz gibt man bei der Anlage der Felder an.

Nachträgliche Änderungen sind mit Vorsicht zu genießen - insbesondere dann wenn die Datenbank von irgendeinem Programm genutzt wird.

Im schlimmsten Fall zerstört man damit die Datenbank - im Idealfall stellt man sich die Frage nach der günstigsten Engine und dem passenden Zeichensatz bevor man anfängt die Datenbank anzulegen.

Kommentar von coding24 ,

Bevor du mit solchen Dingen wie Engine und Co anfängst - tatsächlich einmal sinnvolle Datentypen für die einzelnen Felder anlegen und mit einem Index arbeiten ....

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten