Geschwindigkeit von SQL
-
Hallo
ich würde gerne die Zugriffsgeschwindigkeit von SQL auf eine sehr simple Datenbank messen. (Zeitstempel und Wert)
Ich möchte letztendlich nur nachweisen das meine Zugrifsmethode die ich in C++ geschrieben habe, schneller ist als eine vergleichbare SQL Datenbank.
Bzw. wenn es nicht so sein sollte, dass dann auch feststellen und mit Zeitmessungen belegen.Jemand eine idee wie man soetwas einfach messen kann?
Bzw gibt es vlt. irgendwo eine Übersicht über die Zugriffsgeschwindigkeit von SQL auf seine Datenbank?
Z.B. :
Die Datenbank beinhaltet 5 Millionen Einträge, und ich möchte wissen wie lange (in ms) die Datenbank benötigt um 5000 Einträge von beliebigen Stellen zu laden.Sprich ich möchte einfach nur sehen wie lange SQL braucht um seine Datenbank zu durchwühlen.
-
Unter Windows kann du folgende Funktionen zur Zeitmessung benutzen:
QueryPerformanceCounter und QueryPerformanceFrequency.http://msdn.microsoft.com/de-de/library/windows/desktop/ms644904(v=vs.85).aspx
http://msdn.microsoft.com/de-de/library/windows/desktop/ms644905(v=vs.85).aspx
-
SQL hat keine Zugriffsgeschwindigkeit. Und wie lange ein Query braucht, hängt von ganz vielen Faktoren ab. In erster Linie von der verwendeten Datenbank. Eine Oracle Datenbank hat beispielsweise ein völlig anderes Verhalten als sqlite, obwohl beide SQL verstehen.
Frag einfach mal im richtigen Forum über Details. Datenbanken wäre sicher besser als C++ Forum.
-
Zumal es auch wesentlich von der Größe abhängt.
Grad wenn man echt viel in seiner Datenbank hat, wird man mit einer selbst gebauten Lösung kaum an ein professionelles, kommerzielles System drankommen können.
-
Beschreib´ doch mal deinen konkreten Anwendungsfall.
[Klugscheißermodus]
SQL selbst "hat" keine Geschwindigkeit, es ist lediglich ein Standard, um SQL-konforme Datenbanksysteme anzusprechen. Die Abfragegeschwindigkeit wird durch das DBMS und das DB Schema bestimmt.
[/Klugscheißermodus]
-
Skym0sh0 schrieb:
Zumal es auch wesentlich von der Größe abhängt.
Grad wenn man echt viel in seiner Datenbank hat, wird man mit einer selbst gebauten Lösung kaum an ein professionelles, kommerzielles System drankommen können.
Kommerziell macht eine Datenbank auch nicht schneller. Es gibt mehrere nicht-kommerzielle Lösungen, die auch sehr schnell sind. Und manchmal ist eine flache Datei doch schneller als eine Datenbank.
-
Naja, ich mein das eher so im Sinne von "als einzelner OpenSource-Hobby-Programmierer kommst du nicht gegen mehrere Hauptberufliche Professionals an".
Klar, wenn es um 10-100 oder sogar 1000 Einträge geht, die du in einer simplen Datei speicherst und danach in einen Vector/Array lutscht, dann bist du weit schneller als so ein fettes dickes großes Datenbanksystem.
Es ging eigentlich auch nur darum, dass bei der Zeitmessung auf sehr viele Faktoren ankommt.
-
Skym0sh0 schrieb:
Naja, ich mein das eher so im Sinne von "als einzelner OpenSource-Hobby-Programmierer kommst du nicht gegen mehrere Hauptberufliche Professionals an".
Die Aussage ist auch nicht besser. Warum muss das Open Source dort in Verbindung mit Hobbyprogrammierer und als Gegensatz zum Professional stehen?
Lass es doch einfach weg. Dann wirst du auch den hauptberuflichen Professionals gerecht die Open Source Software schreiben und erweitern. Gerade im Bereich Datenbanken und Analyse hat da z.B. Facebook einiges zu zeigen (siehe https://code.facebook.com/projects/).
-
cl90 schrieb:
Sprich ich möchte einfach nur sehen wie lange SQL braucht um seine Datenbank zu durchwühlen.
Die meisten Datenbanken sind darauf optimiert auch dann noch vernünftig schnell zu sein wenn die Tables nicht mehr komplett ins RAM passen.
D.h. wenn die Tables doch noch komplett ins RAM passen, dann ist man mitstd::mapoder auch was selbstgeschriebenem so-gut-wie immer schneller.Da 5 Millionen x "Zeitstempel und Wert" - wenn mit "Wert" etwas nicht-all-zu-grosses gemeint ist - sich locker im Speicher ausgeht: ich würde drauf wetten dass z.B.
std::mapschneller ist als jede General-Purpose-Datenbank.Zur Zeitmessung hat ja Burkhi schon was geschrieben: unter Windows ist hier
QueryPerformanceCounterangesagt.
-
Mit C++11 kannst du auch Chrono zur Zeitmessung benutzen. Die Standardbibliothek von Visual Studio hatte aber keine hohe Präzision; ich bin mir nicht sicher, ob das bereits besser ist.
-
tntnet schrieb:
Kommerziell macht eine Datenbank auch nicht schneller. Es gibt mehrere nicht-kommerzielle Lösungen, die auch sehr schnell sind. Und manchmal ist eine flache Datei doch schneller als eine Datenbank.
Es kommt sehr stark unter anderem auf den Anwendungsfall, die Datenmengen, die Datenverteilung in Abfragen (Joins) und auf die verwendeten Features an. Nach meiner Erfahrung gibt es durchaus Anwendungsfälle, in denen die kommerziellen Lösungen (z.B. Oracle) besser als die freien (z.B. MySQL oder PostgreSQL) sind und umgekehrt.