У меня есть приложение Laravel, которое выполняет обычную операцию, когда пользователь выбирает около 300 000 строк из таблицы базы данных, которая называется Sign с 3 столбцами. Столбцы таблицы описываются следующим образом: id(int-10), sign(varchar-16), status (int-10)
В таблице около 300 миллионов записей. Когда пользователь принимает некоторые записи, столбцы состояния этих строк изменяются на идентификатор пользователя. Обратите внимание, что пользователь всегда принимает около 300 000 записей одновременно.
Я увеличил innodb_buffer_pool_size и innodb_log_file_size до 2 ГБ и 1 ГБ соответственно. Система имеет 3,75 ГБ оперативной памяти.
Вот код-
$collection = Sign::select('sign')
->where('status', 0)
->where(DB::raw('CHAR_LENGTH(sign)'), '=', 7)
->take(300000);
//write the the signs in $collection in a file here
$collection->update(['status' => $user->id]);
В моем случае данные таблицы извлекаются довольно легко в течение менее 1 с. Раньше на обновление требовалось около 100-200, но недавно я обновил свою операционную систему с Ubuntu 14 до 16, а после этого обновления - около 500-600.
Есть ли способ сделать этот процесс быстрее? Стоит ли увеличивать ОЗУ?