Оптимизация запросов к MySQL
11 апреля 2016, 12:59
Автор: ElenaGr
Есть две таблицы. В одной - данные договоров, во второй - телефоны клиентов. Телефонов - около 8 млн. Задача - выбрать из таблицы договоров ИНН клиентов, договоры которых заканчиваются в определенный период - месяц или декаду. Затем найти телефоны из таблицы телефонов. Связь таблиц - по ИНН. Телефонов у клиента м.б. несколько, нужен только один. Затем эти телефоны вывести как csv для загрузки в другую программу (call-center).
Сейчас делаю так:
1. Выбираю уникальные ИНН за нужный период в нужном формате:
SELECT DISTINCT LPAD(AFM, 9, '0') as afm FROM `ysae_policies_athens` WHERE
`PolicyEnd` BETWEEN STR_TO_DATE('2016-05-01 00:00:00', '%Y-%m-%d %H:%i:%s') AND
STR_TO_DATE('2016-05-05 23:59:59', '%Y-%m-%d %H:%i:%s')
2. Делаю экспорт полученных записей в csv-файл.
3. Читаю построчно этот файл скриптом, находя телефоны, записываю их в другой csv, который потом можно будет скормить другой программе.
Если за один период выбираю, то нормально, только долго. А если надо объединить несколько периодов, то уже нет уверенности, что в csv попадут уникальные номера телефонов (у клиента м.б. и несколько договоров в разные периоды). Поэтому переделываю скрипт, чтоб телефоны сохранялись в новой таблице. Так можно будет отследить их уникальность и выбирать не все сразу, а группами. Искала, как правильно работать с большими объемами данных. Наткнулась на вашу библиотеку, захотела попробовать.
Сейчас делаю так:
1. Выбираю уникальные ИНН за нужный период в нужном формате:
SELECT DISTINCT LPAD(AFM, 9, '0') as afm FROM `ysae_policies_athens` WHERE
`PolicyEnd` BETWEEN STR_TO_DATE('2016-05-01 00:00:00', '%Y-%m-%d %H:%i:%s') AND
STR_TO_DATE('2016-05-05 23:59:59', '%Y-%m-%d %H:%i:%s')
2. Делаю экспорт полученных записей в csv-файл.
3. Читаю построчно этот файл скриптом, находя телефоны, записываю их в другой csv, который потом можно будет скормить другой программе.
Если за один период выбираю, то нормально, только долго. А если надо объединить несколько периодов, то уже нет уверенности, что в csv попадут уникальные номера телефонов (у клиента м.б. и несколько договоров в разные периоды). Поэтому переделываю скрипт, чтоб телефоны сохранялись в новой таблице. Так можно будет отследить их уникальность и выбирать не все сразу, а группами. Искала, как правильно работать с большими объемами данных. Наткнулась на вашу библиотеку, захотела попробовать.