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

准确地存储和检索数据是数据库的工作。你描述你想要的东西,它提供它。如果你想特别控制如何它会这样做然后数据库不是答案。