2010-12-29 5 views
2

Hallo Ich versuche, Daten zu schreiben, die ich std::map<key, value> in eine SQL-Datenbank habe. In der Map werden die Schlüssel zur einfachen Suche sortiert, aber wenn ich eine Tabelle in sql von Map-Elementen erstellen würde, wie schwer wäre es, die Tabelle zu durchsuchen, um einen Datensatz anhand ihrer Schlüssel-ID zu erhalten?Wie effizient ist die Suche in der SQL-Datenbank?

+1

Warum sollten Sie suchen? Was genau meinst du mit "suchen"? Das ist der Punkt von SQL, also können Sie nur die gewünschten Daten auswählen. – Falmarri

+0

Fragen Sie, ob eine SQL DB schneller ist als eine std :: map? –

+0

Ich wollte herausfinden, wie schneller oder langsamer ein Datensatz nach Schlüssel abgerufen werden würde. – kox

Antwort

1

Ungefähr so ​​hart wie zu lernen, wie man die SQL SELECT-Anweisung verwendet.

+0

Was bedeutet das? – kox

+0

Es bedeutet, dass sobald Sie wissen, wie Sie SQL verwenden, Ihr Problem unglaublich trivial ist. Mit anderen Worten, über das einzige, was Sie tun müssen, lesen Sie ein Buch über SQL und Sie sind zu 99% fertig. –

+0

Ich kenne die Aussage bereits, aber ich fragte, ob ich in der Lage sein würde, die gleichen Ergebnisse zu erhalten. – kox

4

Die Suche wäre einfach, die Effizienz hängt davon ab, ob Ihre Indexierung korrekt ist oder nicht.

0

Was möglicherweise ineffizient sein würde, wäre das Konstruieren und Dekonstruieren mehrerer SQL-SELECT-Anweisungen, bei denen alles, was Sie wollen, ein anderer Wert in der "Where" -Klausel für die Variable ist.

Gespeicherte Prozeduren könnten dazu weitaus effizienter sein.

0

Sie Frage ist vage, aber es scheint, als ob Sie Äpfel und Orangen vergleichen. SQL wurde entwickelt, um skalierbare Daten effizient zu suchen. C (oder eine andere Sprache) Schlüssel-Wert-Paare sind auf RAM beschränkt, sind also nicht sehr skalierbar. Es gibt Gemeinkosten bei der Kommunikation mit einem RDBMS. Es gibt Speicherdruck, Design-Effizienz (dh Ihre gewählten Datentypen und Indizes), implementiert den Algorithmus C++ für die Suche (Hash/B-Baum) usw.

Am Ende des Tages ist die richtige Frage zu stellen , "Welches Werkzeug ist das Beste für den Job?" und lass es dabei.

0

Angenommen, Sie fügen die Daten aus einer Karte in eine Datenbanktabelle ein, haben Sie den Primärschlüssel für Ihre Tabelle, dh den Schlüssel, den Sie für die Karte verwenden, und da die Karte keine doppelten Schlüssel zulässt, haben Sie jeweils einen eindeutigen Schlüssel Aufzeichnung.

Erstellen Sie einen Index für den Schlüssel für die Tabelle. Erstellen Sie einen Index, sonst führen alle Ihre Abfragen einen vollständigen Tabellenscan durch, und alle Vorteile von eindeutigen Zeilen gehen den Bach runter. Aber Vorsicht, wenn Sie nur 100 Zeilen oder etwas anderes zuordnen, erzeugen Sie unnötigerweise einen riesigen Overhead, indem Sie einen Index auf dem Tisch erstellen.

Das Erstellen von Indizes wäre in den Datenbanken mehr oder weniger gleich, aber es wäre ziemlich schwierig, die Effizienz abzuschätzen, ohne zu wissen, welche Datenbank Sie verwenden und wie viele Daten in der Tabelle gespeichert werden.

0

Wenn die Daten zum Speicher passen, wäre std :: map viel effizienter als jeder andere DB.

Nachdem ich gegen Sqlite3 getestet habe mit In-Memory-Datenbank und std :: map war schneller von einer Größenordnung (und SQLite ist sehr schnell in diesem Fall schneller als jede andere RDBMS ich gesehen habe)

Grund: es bietet direkten Zugriff auf die Datenstruktur es hat keine Zwischenschicht und ermöglicht es, über Baum sehr schnell zu gehen.

Wenn Ihre Daten jedoch sehr groß sind oder Sie nicht zu viel Speicher verwenden möchten, ist RDBMS eine gute Lösung, und wenn Sie den Index für den Schlüssel angeben, wäre das ziemlich schnell.

Verwandte Themen