狂自私

导航

grafana数据过滤器不支持变量

我也不知道该记录在哪儿,事实上,这是一个grafana使用mysql查询数据的问题;

我的mysql是8.0.21版本;

我在grafana上设置两个变量,line_name和tower_name;然后使用sql语句去查询数据,但是有时候,tower_name变量是空的,而且tower_name对应的表的数据量比较大;这直接导致查询语句变成了这样:

# 性能问题还是比较严重
SELECT * FROM (SELECT
  obj_code as `pms编码`,
  obj_order as `名称`,
  p_name as `站线`,
  device_state as `状态`,
  city_name as `地市`,
  maintain_unitname as `运维分部`,
  cast(last_update_time as char(20)) as '更新时间',
  obj_id  as 'psrId资源id',
  pms_id as 'astId资产id',
  obj_type as '台账类型'
FROM
  r_device_tower
WHERE
  p_line in (
    SELECT
      obj_id
    FROM
      r_device_line
    WHERE
      line_name like '%某某线路%'
  ))as sub
  WHERE sub.名称 like '%%'

直接变成慢查询,其实原因出现在【sub.名称 like '%%'】,从结果上来说,要不要这个条件的结果都是一样的;但是mysql那边好像没有优化这样的查询。

然后grafana里面的【filter data by values】过滤器也是垃圾,不支持使用变量来进行过滤;

解决办法是:使用正则表达式:

# 性能问题还是比较严重
SELECT * FROM (SELECT
  obj_code as `pms编码`,
  obj_order as `名称`,
  p_name as `站线`,
  device_state as `状态`,
  city_name as `地市`,
  maintain_unitname as `运维分部`,
  cast(last_update_time as char(20)) as '更新时间',
  obj_id  as 'psrId资源id',
  pms_id as 'astId资产id',
  obj_type as '台账类型'
FROM
  r_device_tower
WHERE
  p_line in (
    SELECT
      obj_id
    FROM
      r_device_line
    WHERE
      line_name like '%$line_name%'
  ))as sub
  WHERE sub.名称 REGEX '.*$tower_name.*';

性能直线上升!

posted on 2025-03-19 11:53  狂自私  阅读(49)  评论(0)    收藏  举报