Доброе утро, друзья. У меня есть большая таблица заказчиков: t_customer с 10.000.000 строк. Мне необходимо по каждому заказчику выполнить какое-либо действие.
Я запускаю некий php-скрипт, который выбирает данные из этой таблицы. Но, чем дальше я запрашиваю данные, то SQL-запрос выполняется все медленнее и медленее, и теперь дошло до "Query execution was interrupted".
Запрос такой:
SELECT id, login FROM t_customer WHERE regdate<1370955715 LIMIT 2600000, 100000;
То есть, такой лимит вообще уже не выполняется ( Уэ не знаю, что и делать. Прошу, помогите мне.
Лучше 100 раз запустите скрипт с лимитом 1000, раз все так тяжело. В вашей ситуации я бы предложил сделать обновление на уровне SQL. Если же требуется какое-то более осмысленное действие - разбивка скрипта и запуск по планировщику или при помощи цикличного Javascript.
Еще вариант - разбивка таблицы. Например, по месяцам. Но это уже из области извращения
Попробуйте сделать партиционирование таблицы заказчиков. Если часто приходится выбирать по дате регистрации, то сделайте партиционирование по дате. Потом перенесите данные из одной таблицы в другую:
INSERT INTO new_table
SELECT * FROM old_table
Очень важно исходить из того, какая выборка чаще всего используется, потому как вся польза партиционирования может быть потеряна, если делать выборку по полю, которое не используется как индекс для деления на партиции.
UPD. Во время переноса (код выше) - совершайте свое действие/действия. Все операции по обновлению вынесите в SQL. Создали новую таблицу -> перенесли в нее данные -> удалили старую -> переименовали новую.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок