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, чтобы создать этот индекс для этой таблицы базы данных.

Другие вопросы по тегам