Как отобразить метаданные временных рядов в легенде или аннотации графов

Фокусировка на ...

SELECT  ...
    from  g4_airport AS g4
    join     airport AS a
         ON g4.code = case g4.code_type
             when 'iata' then a.iata_code
             when 'faa'  then a.local_code
             when 'icao' then a.ident   end
    where  a.country_iso = 'us'
    order by  a.iata_code;

Пожалуйста, попробуйте эти и укажите EXPLAIN SELECT ... и время.

Бросьте DISTINCT, я не думаю, что это необходимо , по крайней мере, не в моих мыслях 2,3.

Мысль № 1: INDEX(country_iso, iata_code)

Мысль № 2:

( SELECT  ...
    from  g4_airport AS g4
    join     airport AS a
         ON g4.code_type = 'iata'
        AND g4.code = a.iata_code
    where  a.country_iso = 'us'
    order by  a.iata_code;
) UNION ALL
( SELECT  ...
    from  g4_airport AS g4
    join     airport AS a
         ON g4.code_type = 'faa'
        AND g4.code = a.local_code
    where  a.country_iso = 'us'
)
) UNION ALL
( SELECT  ...
    ...  icao...ident
)    
ORDER BY  a.iata_code;

airport:     INDEX(country_iso)   -- although it may not be used
g4_airport:  INDEX(code_type, code)  -- for each `JOIN`

Мысль № 3:

Сначала получите идентификаторы, затем просмотрите детали

SELECT a..., g4...        -- the various columns desired
    FROM
    (      -- start of UNION
        ( SELECT  a.id AS aid, g4.id AS g4id   -- only the PKs
            from  g4_airport AS g4
            join     airport AS a
                 ON g4.code_type = 'iata'
                AND g4.code = a.iata_code
            where  a.country_iso = 'us'
            order by  a.iata_code;
        ) UNION ALL
        ( SELECT  a.id AS aid, g4.id AS g4id
            from  g4_airport AS g4
            join     airport AS a
                 ON g4.code_type = 'faa'
                AND g4.code = a.local_code
            where  a.country_iso = 'us'
        )
        ) UNION ALL
        ( SELECT  ...
            ...  icao...ident
        )
    ) AS u       -- end of the UNION
    JOIN    airport AS a  WHERE  a.id = u.aid
    JOIN ga_airport AS g4 WHERE g4.id = u.g4id
    ORDER BY  u.iata_code;

airport:     INDEX(country_iso)   -- although it may not be used
g4_airport:  INDEX(code_type, code)  -- for each `JOIN`

(я предполагаю, что id является PRIMARY KEY, если каждая таблица.)

Я не знаю, будет ли мысль №3 быстрее, чем # 2.

(Мысли № 2,3 могут иметь таблицы назад.)

0
задан Like_a_sturgeon 18 January 2019 в 23:42
поделиться