如果我有下表。Ruby on Rails,ActiveRecord,二进制搜索
create_table :my_table, :id => false do |t|
t.string :key_column
t.string :value_column
end
我将如何确保各行通过的场均optimaly 存储的二进制搜索:关键?
我如何确保使用二进制搜索?
如果我有下表。Ruby on Rails,ActiveRecord,二进制搜索
create_table :my_table, :id => false do |t|
t.string :key_column
t.string :value_column
end
我将如何确保各行通过的场均optimaly 存储的二进制搜索:关键?
我如何确保使用二进制搜索?
对于任何有趣的行数,通过键访问单个随机记录的最佳方式(对于大多数“最优”定义)是创建一个索引。
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作为存储引擎,前提是您的“最优”定义不包括“最可靠”。
准确地存储和检索数据是数据库的工作。你描述你想要的东西,它提供它。如果你想特别控制如何它会这样做然后数据库不是答案。