Зачем нужны индексы в БД и как с ними работать в Node.js?

«Зачем нужны индексы в БД и как с ними работать в Node.js?» — вопрос из категории Базы данных, который задают на 30% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Индексы в базах данных — это структуры, ускоряющие выполнение запросов поиска, фильтрации (WHERE), сортировки (ORDER BY) и соединения (JOIN). Они работают аналогично алфавитному указателю в книге, позволяя СУБД быстро найти нужные строки без полного сканирования таблицы (full table scan).

Работа с индексами из Node.js (на примере MongoDB с Mongoose и PostgreSQL с Sequelize):

1. MongoDB / Mongoose: Индексы определяются в схеме.

// user.model.js
const userSchema = new mongoose.Schema({
  email: { type: String, required: true, unique: true, index: true }, // Индекс для уникальности и поиска
  name: { type: String, index: 'text' }, // Текстовый индекс
  createdAt: { type: Date, index: -1 } // Индекс по убыванию для сортировки новых записей
});
// Также можно создать составной индекс
userSchema.index({ isActive: 1, role: 1 });

2. PostgreSQL / Sequelize: Индексы задаются в опциях модели или через миграции.

// В определении модели
const User = sequelize.define('User', {
  email: { type: DataTypes.STRING, unique: true }
}, {
  indexes: [
    { unique: true, fields: ['email'] },
    { name: 'active_users_idx', fields: ['is_active', 'created_at'] }
  ]
});

Когда создавать индексы:

  • Для полей, часто используемых в условиях WHERE.
  • Для полей в ORDER BY и GROUP BY.
  • Для полей, участвующих в JOIN.

Ограничения: Индексы замедляют операции записи (INSERT, UPDATE, DELETE), так как их тоже нужно обновлять, и занимают дополнительное дисковое пространство. Важно находить баланс, анализируя частые запросы с помощью EXPLAIN.

Видео-ответы