0

如果我有下表。

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

我将如何确保通过 :key 字段为二进制搜索优化存储行?

我将如何确保使用二进制搜索?

4

2 回答 2

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 性能,您可能应该选择 MyISAM 而不是 InnoDB 作为存储引擎,前提是您对“最佳”的定义不包括“最可靠”。

于 2009-05-17T16:52:18.403 回答
1

准确存储和检索数据是数据库的工作。你描述你想要什么,它就会交付它。如果您想具体控制它是如何进行的,那么数据库不是答案。

于 2009-05-17T18:00:59.783 回答