Выборка данных из большой таблицы MySQL

207
15 декабря 2016, 15:53

Доброе утро, друзья. У меня есть большая таблица заказчиков: t_customer с 10.000.000 строк. Мне необходимо по каждому заказчику выполнить какое-либо действие.

Я запускаю некий php-скрипт, который выбирает данные из этой таблицы. Но, чем дальше я запрашиваю данные, то SQL-запрос выполняется все медленнее и медленее, и теперь дошло до "Query execution was interrupted".

Запрос такой:

SELECT id, login FROM t_customer WHERE regdate<1370955715 LIMIT 2600000, 100000;

То есть, такой лимит вообще уже не выполняется ( Уэ не знаю, что и делать. Прошу, помогите мне.

Answer 1

Лучше 100 раз запустите скрипт с лимитом 1000, раз все так тяжело. В вашей ситуации я бы предложил сделать обновление на уровне SQL. Если же требуется какое-то более осмысленное действие - разбивка скрипта и запуск по планировщику или при помощи цикличного Javascript.

Еще вариант - разбивка таблицы. Например, по месяцам. Но это уже из области извращения

Answer 2

Попробуйте сделать партиционирование таблицы заказчиков. Если часто приходится выбирать по дате регистрации, то сделайте партиционирование по дате. Потом перенесите данные из одной таблицы в другую:

INSERT INTO new_table
SELECT * FROM old_table

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

UPD. Во время переноса (код выше) - совершайте свое действие/действия. Все операции по обновлению вынесите в SQL. Создали новую таблицу -> перенесли в нее данные -> удалили старую -> переименовали новую.

READ ALSO
Помогите организовать SQL-запрос

Помогите организовать SQL-запрос

У меня есть такая таблица:

147
Архитектура БД для экспорта таблицы

Архитектура БД для экспорта таблицы

Заранее извиняюсь за много букв

128
Все элементы, родитель которых - корневой

Все элементы, родитель которых - корневой

Есть таблица с такой структурой:

147