Rails 6 + PostgreSQL не использует индексное сканирование? - PullRequest
0 голосов
/ 28 февраля 2020

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

Чего мне не хватает ?

Спасибо за ваше время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...