$zapros="SEL ECT DISTINCT
calldate,
src,
dst,
channel,
dstchannel,
billsec,
disposition,
uniqueid,
$file_field,
'',
lastapp,
linkedid
FR OM PT1C_cdr WH ERE linkedid IN (SELECT linkedid FR OM ".$name_tmp_linkedid.") ORDER BY uniqueid;
";
на
Код
$zapros="SELECT DISTINCT
P.calldate,
P.src,
P.dst,
P.channel,
P.dstchannel,
P.billsec,
P.disposition,
P.uniqueid,
P.$file_field,
'',
P.lastapp,
P.linkedid
FR OM PT1C_cdr AS P
INNER JOIN ".$name_tmp_linkedid." L
ON L.linkedid = P.linkedid
ORDER BY uniqueid;
";
Ваш запрос очень не оптимальный, т.к. делает выборку среди всех записей таблицы PT1C_cdr (исходя из EXPLAIN) Для моей базы с чуть меньше 10 млн записей - этот запрос выполняется 25-30 секунд.
Портнов Алексей, мое сообщение получено? Хотелось бы чтобы в следующем релизе это было.
И просьба - сгенирируйте на системе где вы тестируете решение: 1. 10 милионов звонков. 2. 100 тысяч контрагентов с номерами.
И на ней оценивайте производительность решения.
Приведенный выше запрос из решения - отрабатывал 30 секунд. И это не удивительно, т.к. нет индексов и идет поиск по всей таблице с данными. Подправленный - менее секунды.
Также в самой 1с - запросы на получении информации о контрагенте работают крайне долго. На 100 звонков в истории 2 запроса ищут информацию около минуты.