2009-05-17 8 views
0

Wenn ich die folgende Tabelle hatte.Ruby on Rails, ActiveRecord, binäre Suche

create_table :my_table, :id => false do |t| 
    t.string :key_column 
    t.string :value_column 
end 

Wie würde ich sicherstellen, dass die Reihen sind optimal ab gespeichert für binäre Suche durch das Feld: Schlüssel?

Und wie würde ich sicherstellen, dass binäre Suche verwendet wird?

Antwort

2

Für jede interessante Anzahl von Zeilen ist der optimale Weg (für die meisten Definitionen von "optimal"), mit Schlüssel auf einen einzelnen zufälligen Datensatz zuzugreifen, ein Index zu erstellen.

CREATE INDEX my_index ON my_table (key_column); 

oder in einer Active Migration:

add_index(:my_table, :key_column) 

Datenbank-Indizes verwendet in der Regel binäre Suche, B-trees oder ähnliches verwendet wird, die zwischen Lagerkosten und Zeit für den Abruf und Aktualisierung eine gute Balance bietet.

Sicherstellung der Index verwendet wird, sollte für Single-Table-Operationen relativ einfach sein:

MyTable.find_by_key_column('ABC123') 

zum Beispiel sollte wie folgt erzeugen (überprüfen development.log):

SELECT * FROM my_table WHERE (key_column = 'ABC123') 

die sogar Der relativ unscheinbare Optimierer von MySQL sollte kein Problem haben, optimal zu laufen.

Zeilenspeicherung sollte kein Problem für die individuelle Zeilenabfrage sein, was ein Glück ist, da es nicht viel gibt, was Sie tun können, um es trotzdem zu kontrollieren. Für die MySQL-Performance sollten Sie MyISAM über InnoDB als Speicher-Engine wählen, vorausgesetzt Ihre Definition von "optimal" enthält nicht "zuverlässigste".

1

Es ist die Aufgabe der Datenbank, die Daten genau zu speichern und abzurufen. Sie beschreiben, was Sie wollen, es liefert es. Wenn Sie speziell steuern wollen wie geht es so tun, dann ist eine Datenbank nicht die Antwort.