Для любого интересного числа строк оптимальным способом (для большинства определений «оптимального») доступа к одной случайной записи по ключу является создание индекса.
CREATE INDEX my_index ON my_table ( key_column );
или в миграции ActiveRecord:
add_index(:my_table, :key_column)
Индексы базы данных обычно используют бинарный поиск, используя B-деревья или аналогичные, что обеспечивает хороший баланс между затратами на хранение и временем для поиска и обновления.
Обеспечение использования индекса должно быть относительно простым для операций с одной таблицей:
MyTable.find_by_key_column('ABC123')
например, должно генерировать что-то вроде этого (проверьте development.log):
SELECT * FROM my_table WHERE (key_column = 'ABC123')
, который даже относительно не впечатляющий оптимизатор MySQL не должен иметь проблем с оптимальной работой.
Хранение строк не должно быть проблемой для извлечения отдельных строк, что является удачным, поскольку вы все равно мало что можете сделать, чтобы контролировать его. Для производительности MySQL вы, вероятно, должны выбрать MyISAM вместо InnoDB в качестве механизма хранения, при условии, что ваше определение «оптимального» не включает «наиболее надежный».