2009-05-17 13 views
0

次の表がある場合は、Ruby on Rails、ActiveRecord、バイナリ検索

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

どのように私は行がoptimaly の分野でバイナリ検索用に格納されていることを確認します:キー?

2進検索が使用されていることを確認するにはどうすればよいですか?

答えて

2

関心のある行については、キーによる単一のランダムレコードにアクセスするための最適な方法(「最適」のほとんどの定義について)は、インデックスを作成することです。

CREATE INDEX my_index ON my_table (key_column); 

またはActiveRecordの移行における

add_index(:my_table, :key_column) 

データベースインデックスは、典型的には、検索および更新のためのストレージ・コストと時間との間の良好なバランスを提供B-treesまたは類似を使用して、バイナリ検索を使用。 (development.logチェック)

MyTable.find_by_key_column('ABC123') 

は、例えば、このようなものを生成する必要があり:

インデックスは単一テーブル操作のための比較的簡単であるべきで使用される保証

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

れてもMySQLの比較的単純なオプティマイザは、問題なく最適に動作するはずです。

行の格納は個々の行の検索では問題にならないはずです。行の格納はあまりにも多くの操作で行えないため、幸いです。 MySQLのパフォーマンスに関しては、InnoDB上のMyISAMをストレージエンジンとして選択することをお勧めします。ただし、「最適」の定義には「最も信頼性の高い」ものは含まれません。

1

データを正確に保存して取得することは、データベースの役割です。あなたはあなたが望むものを記述し、それを届けます。あなたが具体的に制御したい場合はそのようにすると、データベースは答えではありません。

関連する問題