Встречается на собеседованиях • сегодня

Как проиндексировать большое количество данных при добавлении их в таблицу без индексов

Для индексации больших данных в таблице без индексов лучше сначала загрузить данные, а затем создать индекс. Это эффективнее, чем индексировать каждую запись по мере вставки.

Пример с SQL:

sql
-- 1. Создаем таблицу без индексов
CREATE TABLE large_data (id INT, name VARCHAR(100));

-- 2. Массовая вставка данных (например, через LOAD DATA или batch-вставки)
INSERT INTO large_data VALUES (1, 'Alice'), (2, 'Bob'), ...;

-- 3. Создаем индекс после загрузки
CREATE INDEX idx_id ON large_data(id);

text

В Java (JDBC + batch-вставка):  
```java
try (Connection conn = DriverManager.getConnection(url);
     Statement stmt = conn.createStatement()) {
    // Отключаем авто-коммит для batch-вставки
    conn.setAutoCommit(false);
    
    // Вставка данных
    PreparedStatement ps = conn.prepareStatement("INSERT INTO large_data VALUES (?, ?)");
    for (Data data : dataset) {
        ps.setInt(1, data.getId());
        ps.setString(2, data.getName());
        ps.addBatch();
    }
    ps.executeBatch();
    conn.commit();

    // Создание индекса после вставки
    stmt.execute("CREATE INDEX idx_id ON large_data(id)");
}

Почему так лучше?

  • Индекс обновляется один раз, а не при каждой вставке.
  • Batch-вставки уменьшают накладные расходы.
  • В некоторых СУБД (например, PostgreSQL) можно временно отключить индексы при массовой вставке (ALTER TABLE ... DISABLE INDEX).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы