Вопрос

Если бы у меня была следующая таблица.

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

Как мне гарантировать, что строки оптимальны? хранится для двоичного поиска по полю :key?

И как мне убедиться, что используется двоичный поиск?

Это было полезно?

Решение

Для любого интересного количества строк оптимальным способом (для большинства определений понятия «оптимальный») доступа к одной случайной записи по ключу является создание индекса.

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 в качестве механизма хранения, при условии, что ваше определение «оптимального» не включает «самый надежный».

Другие советы

Задача базы данных — точно хранить и извлекать данные.Вы описываете то, что хотите, и оно это обеспечивает.Если вы хотите контролировать конкретно как если речь идет об этом, то база данных не является ответом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top