Вот ваш запрос:
SELECT d.idcartera,
concat(d.cedula, ':', planilla.fuerza, ':', planilla.cuotas, ':', d.libranza, ':', planilla.promotor) AS ClienteCedula,
concat(d.nombres, ':', planilla.fuerza, ':', planilla.cuotas, ':', d.libranza, ':', planilla.promotor) AS ClienteNombre,
d.valor, d.tipo, concat(d.ano, '/', d.mes, '-', left(d.tipo,3)) AS anoMes,
planilla.fuerza, planilla.cuotas, planilla.promotor
FROM cartera d INNER JOIN
cartera x
ON d.cedula = x.cedula INNER JOIN
cartera y
ON d.cedula = y.cedula INNER JOIN
planilla
ON d.libranza = planilla.libranza
WHERE (d.tipo not like '%RI-%') AND (left(x.tipo, 3) like 'RC-')
GROUP BY d.idcartera, d.cedula;
Вы делаете самостоятельно присоединиться три раза, а не ссылки на y
таблицы, и делать агрегации без агрегационных функций.
Первое упрощение заключается в том, чтобы удалить y
все вместе. Я думаю, что для фильтрации требуется соединение x
, поэтому я заменю его на exists
. И, я предполагаю, что окончательный запрос не требует агрегации с этими упрощениями. Так, возможно, это делает то, что вы хотите:
SELECT d.idcartera,
concat(d.cedula, ':', p.fuerza, ':', p.cuotas, ':', d.libranza, ':', p.promotor) AS ClienteCedula,
concat(d.nombres, ':', p.fuerza, ':', p.cuotas, ':', d.libranza, ':', p.promotor) AS ClienteNombre,
d.valor, d.tipo, concat(d.ano, '/', d.mes, '-', left(d.tipo,3)) AS anoMes,
p.fuerza, p.cuotas, p.promotor
FROM cartera d INNER JOIN
planilla p
ON d.libranza = p.libranza
WHERE d.tipo not like '%RI-%' AND
exists (select 1
from cartera x
where d.cedula = x.cedula and
x.tipo like 'RC-%'
);
Вы можете по-прежнему включают в себя select distinct
, если это производит много дубликатов.
Я предполагаю, что у вас есть указатели на ключ join
(в частности, planilla(libranza)
). Вам также нужен индекс на cartera(cedula, tipo)
. К сожалению, выражение d.tipo not like '%RI-%'
не может использовать индекс из-за исходного шаблона. Если вам нужна производительность для этого, вы можете рассмотреть полнотекстовый индекс в поле.
Как выглядят ваши клавиши? Имеются ли d.cedula, x.cedula, y.cedula, индексированные? Как насчет полей d.tipo и x.tipo, вы рассчитали индексы в этих полях? –
, возможно, указывая, что означает медленное и что бы вы хотели достичь, помогли бы возможным ответчикам. Кроме того, если вы уже пробовали некоторые оптимизации, это помогло бы опубликовать ваши испытания. –
Ничего не видно из самого запроса ... предложения типа «как» в предложении where, вероятно, вызывают небольшую головную боль. один быстрый reqrite: (left (x.tipo, 3), как «RC-») может быть (left (x.tipo, 3) = 'RC-') (нет необходимости в подобном). Кроме того, вам нужно знать структуру и индексирование таблиц, чтобы помочь оптимизировать это дальше. – Twelfth