У меня есть немного кода в миграции Laravel (база данных MySQL), который выглядит следующим образом:
Schema::table('users', function (Blueprint $table) {
$table->index('column1');
$table->index('column2');
$table->index('column3');
});
Конечный результат выполнения этой миграции в порядке. Проблема в том, что он очень медленный, потому что когда я смотрю MySQL SHOW PROCESSLIST
, Laravel делает это:
ALTER TABLE `users` ADD INDEX `column1_index` (`column1`);
ALTER TABLE `users` ADD INDEX `column2_index` (`column2`);
ALTER TABLE `users` ADD INDEX `column3_index` (`column3`);
Мне интересны преимущества скорости добавления индексов в таблицу с использованием этого стиля запроса:
ALTER TABLE `users`
ADD INDEX `column1_index` (`column1`),
ADD INDEX `column2_index` (`column2`),
ADD INDEX `column3_index` (`column3`);
Если я запускаю последний вручную, это примерно в 3 раза быстрее, чем запуск первого. Для выполнения этих запросов на производстве это чрезвычайно ценно.
Редактировать: Чтобы уточнить, я не ищу составной ключ для этих трех столбцов. Я не ищу $table->index(['column1', 'column2', 'column3']);
Я ищу функционально идентичный результат кода, который у меня уже есть, но выигрыш в скорости объединения трех запросов в один.
Есть ли способ заставить Laravel добавлять / удалять несколько индексов в одном запросе? Если нет, возможно, мне просто нужно выполнить «сырой» запрос.
Спасибо, что уделили время!