Прежде всего вы должны использовать явное соединение. Нет, это сильно влияет на производительность, но это просто хорошая привычка:
SELECT TRIM(MC.PID) ACTOR_PID,
TRIM(MD.PID) DIRECTOR_PID,
COUNT(DISTINCT TRIM(MD.MID)) AS NUM_OF_MOV_1
FROM M_Cast MC join
M_Director MD on (TRIM(MC.MID) = TRIM(MD.MID))
GROUP BY ACTOR_PID, DIRECTOR_PID
Во-вторых, вы должны хранить данные, чтобы вам не приходилось использовать TRIM()
как часть JOIN. Для этого сначала исправьте старые данные:
UPDATE M_Cast SET MID=TRIM(MID);
UPDATE M_Director SET MID=TRIM(MID);
, а затем убедитесь, что все будущие вставки уже обрезаны. После этого вы должны добавить соответствующие индексы.
ALTER TABLE M_Cast ADD INDEX (MID);
ALTER TABLE M_Director ADD INDEX (MID);
Это должно значительно улучшить ваш запрос.
Для дальнейшего использования рассмотрите возможность использования EXPLAIN , чтобы узнать, какие ключи используются используемый. Для дальнейших улучшений вам необходимо предоставить гораздо больше информации.