查询某子表的最新一条(limit 1)记录耗时过长,改为last缓存查询,时间没有提升

【TDengine 使用环境】 测试环境
生产环境 /测试/ Poc/预生产环境

【TDengine 版本】 3.3.7.5 OSS

【操作系统以及版本】 Ubuntu 22.04.5

【部署方式】容器/非容器部署 容器

【集群节点数】 1

【集群副本数】 1

【描述业务影响】

【问题复现路径/shan】做过哪些操作出现的问题

【遇到的问题:问题现象及影响】

【资源配置】

【报错完整截图】(不要大段的粘贴报错代码,论坛直接看报错代码不直观)

python连接td查询的时候,查询一条时间都在200ms左右,但是写入只要0.4ms,已经开启了lastrow缓存,并且where语句筛选tag也是确定能只命中一个子表的,具体的python脚本如下:

我理解查询的效率不会那么低,尤其是开启了last缓存的情况下,应该比原生的limit 1查询更快,但是实际上两个的查询时间都很慢,请问应该怎么调整?

因为使用了 where 条件查询,last查询不可以走缓存。

where能够直接命中一张子表也不可以吗?

不可以,我们只会缓存“最新的数据” ,如果增加了筛选条件,那缓存中的结果是没有意义的。

刚才尝试了,去掉where,单条查询能够缩短到30ms以内,是在本地查询的,如果获取的数据多一点,效率还是有点低的,这个效率还能提高吗?

单条查询提升空间不大了。
不太清楚您的场景,如果是需要查询多张子表 last 的情况,我推荐您可以使用批量查询的方式,一次查询一张超级表下多张子表的 last。

例如:
select tbname,last(*) from test.meters where tbname in (‘d1’,‘d2’,‘d3’,‘d4’,‘d5’,‘d6’,‘d7’,‘d8’,‘d9’,‘d10’) partition by tbname;

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。