MySQL коррелированный подзапрос SUM () ORDER BY - PullRequest
1 голос
/ 26 августа 2011

Есть ли возможность оптимизировать следующий запрос:

SELECT
  t1.id,
  (SELECT SUM(col1) FROM table_name_two t2 WHERE t2.name LIKE CONCAT('%',t1.name)) AS col1_count
FROM
  table_name_one t1
ORDER BY 
  col1_count DESC

Использование ORDER BY col1_count DESC занимает много времени.

Спасибо.

1 Ответ

2 голосов
/ 26 августа 2011

Просто сделайте нормальное объединение с вашим сравнением в предложении on объединения:

SELECT
  t1.id,
  SUM(t2.col1) AS col1_count
FROM table_name_one t1
LEFT JOIN table_name_two t2 on t2.name LIKE CONCAT('%', t1.name)
GROUP BY 1
ORDER BY 2 DESC

Это должно быть в случае быстрее - это в основном один запрос вместо "nзапросов, хотя он не получит никакой помощи от индексов, использующих оператор LIKE с лидирующим %

...