Полагаю, причина в том, что вы выполняете огромное объединение трех таблиц (без применения условия where сначала получается 10k * 10k * 100M = 10 16 строк). Попробуйте переупорядочить объединения (например, начните с metaward_award
, затем присоединитесь только к metaward_achiever
, посмотрите, сколько времени это займет, затем попробуйте подключить metaward_alias
, возможно, используя подзапрос для форсирования предпочтительного порядка оценки).
Если это не поможет, возможно, вам придется денормализовать ваши данные, например, путем сохранения количества псевдонимов для конкретного metaward_achiever
. Тогда ты избавишься от одного соединения в целом. Возможно, вы даже можете кэшировать суммы для metaward_award
, в зависимости от того, как и как часто обновляются ваши данные.
Другая вещь, которая может помочь, - это загрузить все содержимое вашей базы данных в ОЗУ: -)