В моем проекте Rails я хочу ускорить запросы к базе данных, обеспечив им правильную индексацию.
У меня есть модель Message
со столбцами created_at
, status_updated_at
, message_type
, direction
, status
, среди прочих.
В некоторых местах мне нужно выполнить запрос, такой как Query 1:
Message.where(created_at: @start_date..@end_date)
.where(message_type: @message_types)
.where(direction: 'outgoing')
.where(status: Message::STATUS_DELIVERED)
.where('status_updated_at - created_at >= ?', "90 seconds")
.where('status_updated_at - created_at < ?', "180 seconds")
В некоторых других местах мне нужно запросить только 1 изстолбцы, например, просто Message.where(direction: 'outgoing')
(назовите это Query 2).
Для длинного запроса, Query 1, я создал эту миграцию, чтобы ускорить ее:
add_index :messages, [:direction, :status, :created_at, :status_updated_at], name: 'dashboard_delivery_time_index'
Для второго запроса, запроса 2, в дополнение к добавленной выше индексации я создал эту миграцию:
add_index :messages, :direction, name: 'index_messages_on_direction'
Будет ли вторая миграция избыточной и ненужной, поскольку первая миграция уже включает :direction
?
Код работает нормально.Но просто интересно, нужна ли вторая миграция.
Спасибо.