Rails начинающий здесь, пытаясь понять, как работают индексы базы данных. Ни одна из моих попыток не увенчалась успехом, поэтому я делюсь простейшими примерами.
Я ожидаю индексировать столбец status
в таблице products
:
add_index :products, :status
create_table "products", force: :cascade do |t|
t.integer "status"
t.index ["status"], name: "index_products_on_status"
end
Но несмотря на мою миграцию и schema.rb
, похоже, что индекс не существует:
ActiveRecord::Base.connection.index_exists?(:product, :status)
=> false
Product.where(status: 1).explain
Seq Scan on products (cost=0.00..2.25 rows=1 width=107)
Разве этого одного индекса недостаточно, чтобы запросить PostgreSQL на сканирование индекса? Или PostgreSQL выбирает Seq Scan по другим причинам (небольшое количество записей)?
Другой пример с существующим индексом:
add_index :users, :role
create_table "users", force: :cascade do |t|
t.integer "role"
t.index ["role"], name: "index_users_on_role"
end
ActiveRecord::Base.connection.index_exists?(:users, :role)
=> true
User.where(role: 1).explain
Seq Scan on users
Чего мне не хватает ?
Спасибо за ваше время