MySQL · MySQL 8.4.6
В 2019 году основной кластер GitHub mysql1 держал около 950 тысяч запросов в секунду. Чтобы его разрезать, таблицы разбили на схемы-домены, а линтер стал ловить запросы, которые трогают таблицы из разных доменов.
schema_domains — какой таблице какой домен назначен. queries — тексты запросов, query_tables — какие таблицы трогает запрос (строка может повторяться). Таблица без записи в schema_domains считается доменом unassigned. Запросы с комментарием cross-schema-domain-query-exempted линтер пропускает.
Верните query_id, domains — домены через запятую по алфавиту без повторов, n_domains — сколько их. Только запросы с двумя доменами и больше, по возрастанию query_id.
В работе: Подготовка к разрезанию монолитной БД: список мест в коде, которые сломаются, когда домены уедут в разные кластеры.
Источник: кейс GitHub: разделение кластера mysql1 на схемы-домены, 2021. Условие пересказано своими словами.
Какие запросы вернут список запросов, пересекающих домены?
- INNER JOIN schema_domains
- COUNT(*) вместо COUNT(DISTINCT …)
- LEFT JOIN, COALESCE и COUNT(DISTINCT …)
- Без фильтра по комментарию
- Сначала пары (запрос, домен) через DISTINCT, потом GROUP BY