我有以下名为‘LOG_DATA’的MySQL表-MyISAM
没有 keys ,没有索引,什么都没有.
VarId INT(11)
VarValue float
CurDate datetime(3)
此表的目的是记录数据,VarID是一个整数,指向提供此实际变量的‘名称’的另一个表.因此,特定的LOG_DATA表包含所有的过程数据,由VarID分隔,并且通常在特定的日期范围(CurDate)内.由于每个变量的日志(log)记录间隔约为100ms,因此该表的增长速度相当快.当前数据集有2亿条记录.
示例查询:
SELECT
CurDate AS "time",
VarValue AS 'Motor Power'
FROM log_data
WHERE
CurDate BETWEEN FROM_UNIXTIME(1699511240) AND FROM_UNIXTIME(1699543207) AND VarId = 6
我在找出加速这些类型的查询的最佳方式时遇到了问题.当我在Grafana中显示这些变量时,一个面板可以有10个这样的查询(具有不同的VarID).然后,单个面板需要大约20秒才能加载.
优化这些类型的查询的最佳方式是什么?
我试着使用主键‘id’,在CurDate字段上建立索引,但这没有帮助.它甚至将查询时间增加到1分钟以上.此外,从InnoDB切换到MyISAM也带来了性能上的优势,但我仍然希望它能更快.