代码之家  ›  专栏  ›  技术社区  ›  Roel

MySQL查询查看速度慢

  •  1
  • Roel  · 技术社区  · 7 年前

    我在视图中使用了以下查询:

    select `a`.`device_id` AS `device_id`,
           `a`.`alias` AS `alias`,
           `a`.`freq` AS `freq`,
           `a`.`gateway` AS `gateway`,
           `a`.`device_lat` AS`device_lat`,
           `a`.`device_long` AS `device_long`,
           `a`.`device_disabled` AS `device_disabled`,
           count(`b`.`msg_id`) AS `total_messages`,
           avg(`b`.`rssi`) AS `avg_rssi`,
           max(`b`.`db_timestamp`) AS `last_active`,
           (now() <= (max(`b`.`db_timestamp`) + interval 3 hour)) AS `device_status`
    from `demo`.`lora_device` `a` 
    left join `demo`.`lora_message` `b` on `a`.`device_id` = `b`.`eui` 
    group by `a`.`device_id`
    

    加载此查询大约需要4秒钟,有关选项卡的信息:

    lora_设备:520行约10列

    通常我会说这对mysql来说不是问题,但出于某种原因,它进展得很慢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Radim Bača    7 年前

    尝试添加索引

     create index ix_loramessage_rssi on lora_message(eui, rssi)
     create index ix_loramessage_db_timestamp on lora_message(eui, db_timestamp)
    

    和使用

     count(`b`.`rssi`) AS `total_messages`,
    

     count(`b`.`msg_id`) AS `total_messages`,
    

    因为它应该在查询中返回相同的结果