add_index в схеме для существующей таблицы
Я следую за приложением с открытым исходным кодом в качестве руководства для моего приложения. Немного предыстории, я пытаюсь вложить форму в активного администратора. Я предполагаю, что это часть их вложенной формы.
Схема OpenSource
create_table "addresses", :force => true do |t|
t.integer "addressable_id"
t.string "addressable_type"
t.string "street"
t.string "city"
t.string "state", :limit => 2
t.integer "zip"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "addresses", ["addressable_type", "addressable_id"], :name => "index_addresses_on_addressable_type_and_addressable_id"
Моя схема точно такая же, за исключением add_index внизу. Как они это получают и, может быть, если у вас есть время, почему? Заранее спасибо.
2 ответа
Я предполагаю, что Адреса - это полиморфная таблица, поэтому у вас есть столбцы addressable_id и addressable_type. Так что КАЖДЫЙ РАЗ вы ищите адрес объекта, вы должны искать в обоих столбцах. Чтобы оптимизировать время поиска в базе данных, вы создаете индекс, включающий эти столбцы.
ActiveAdmin добавляет индекс в таблицу базы данных, чтобы повысить производительность в базе данных. Индекс - это не дополнительная строка в таблице, а отдельная конструкция, которая позволяет ядру базы данных быстрее находить вещи. Отличная вводная статья может быть найдена здесь:
http://www.mysqlperformanceblog.com/2011/08/30/explaining-indexes-with-a-library-metaphor/
Rails-миграции используют синтаксис add_index, чтобы создать этот индекс для этой таблицы базы данных.