[英]MySQL query for view slow performance
我在視圖中使用了以下查詢:
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_message : 25k 行約 20 列
lora_device :520 行約 10 列
通常我會說這對 mysql 來說不是問題,但由於某種原因,它運行得很慢。
嘗試添加索引
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`,
因為它應該在您的查詢中返回相同的結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.