Эту проблему довольно сложно описать, и поэтому трудно найти ответ. Я надеюсь, что некоторые эксперты могут поделиться своим мнением по этому поводу.
У меня есть таблица с примерно 1 миллионом записей. Структура таблицы примерно такая:
items{
uid (primary key, bigint, 15)
updated (indexed, int, 11)
enabled (indexed, tinyint, 1)
}
Сценарий такой. Я должен выбирать все записи каждый день и выполнять некоторую обработку. Для обработки каждого элемента требуется около 3 секунд.
Я написал PHP-скрипт для извлечения 200 элементов каждый раз, используя следующее.
select * from items where updated > unix_timestamp(now()) - 86400 and enabled = 1 limit 200;
Затем я обновлю «обновленное» поле выбранных элементов, чтобы убедиться, что оно не будет выбрано снова в течение одного дня. Выбранный запрос примерно такой.
update items set updated = unix_timestamp(now()) where uid in (1,2,3,4,...);
Затем PHP продолжит работать и обрабатывать данные, которые больше не требуют подключения к MYSQL.
Поскольку у меня есть миллион записей, и каждая запись обрабатывается 3 секунды, это определенно невозможно сделать последовательно. Поэтому я буду выполнять PHP каждые 10 секунд.
Однако с течением времени и ростом таблицы выбор становится намного медленнее. Иногда для запуска требуется более 100 секунд!
У вас есть какие-либо предложения, как я могу решить эту проблему?