2009-05-17 134 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

對於任何有趣的行數,通過鍵訪問單個隨機記錄的最佳方式(對於大多數「最優」定義)是創建一個索引。

CREATE INDEX my_index ON my_table (key_column); 

或一個ActiveRecord遷移:

add_index(:my_table, :key_column) 

數據庫索引通常使用二進制搜索,使用B-trees或類似的,它提供了存儲成本和時間檢索和更新之間的良好平衡。

確保索引用於應該對單表操作相對簡單:

MyTable.find_by_key_column('ABC123') 

例如,應該產生像這樣(檢查development.log):

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

甚至MySQL相對簡單的優化器應該沒有問題運行最佳。

行存儲不應該成爲單個行檢索的問題,這是幸運的,因爲無論如何你沒有多少可以控制它。對於MySQL性能,您應該選擇InnoDB上的MyISAM作爲存儲引擎,前提是您的「最優」定義不包括「最可靠」。

1

準確地存儲和檢索數據是數據庫的工作。你描述你想要的東西,它提供它。如果你想特別控制如何它會這樣做然後數據庫不是答案。