Задать вопрос
glossyweb
@glossyweb
Mark marketing

Возможно ли оптимизировать mysql запрос?

SELECT 
      name,iso2,(SELECT COUNT(`link_id`) FROM `links` WHERE `country` = `countries`.`iso2`) AS `total_links` 
FROM 
           `countries` 
WHERE (SELECT COUNT(`link_id`) FROM `links` WHERE `country` = `countries`.`iso2`) > 0 ORDER BY `name`

Вывод мне нужен вот такой:

[{"name":"United States","iso2":"US","total_links":"1"},{"name":"Venezuela","iso2":"VE","total_links":"1"},{"name":"Vietnam","iso2":"VN","total_links":"2"}]

Время выполнения - 1.422147 s.
Можно ли как-то оптимизировать?
  • Вопрос задан
  • 169 просмотров
Подписаться 2 Простой 3 комментария
Решение пользователя Slava Rozhnev К ответам на вопрос (3)
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Сразу готовый JSON из базы данных:
WITH countries_links AS (
    SELECT JSON_OBJECT('name', `name`, 'iso2', `iso2`, 'links', COUNT(`link_id`)) d
    FROM `links`
    JOIN `countries` ON `countries`.`iso2` = `links`.`country`
    GROUP BY `name`, `iso2`
    HAVING COUNT(`link_id`) > 0
) SELECT JSON_ARRAYAGG(d) FROM countries_links

Пример: https://sqlize.online/sql/mysql80/087bf8ba4f587b13...
Ответ написан
Комментировать