优化查询
优化SQL和InfluxQL查询以提高性能并减少其内存和计算(CPU)需求。了解如何使用可观察性工具来分析查询执行并查看指标。
为什么我的查询慢?
查询性能取决于时间范围和复杂性。如果一个查询比您预期的慢,可能是因为以下原因:
- 它查询来自大时间范围的数据。
- 它包括密集操作,例如查询许多字符串值或
ORDER BY
排序或重新排序大量数据。
提高查询性能的策略
以下设计策略通常可以提高查询性能和资源使用:
某些瓶颈可能超出了您的控制,是次优执行计划的结果,例如:
- 对已排序的数据应用相同的排序(
ORDER BY
)。 - 从对象存储中检索许多Parquet文件——如果它检索的文件更少,尽管文件更大,性能会更好。
- 查询许多重叠的Parquet文件。
- 执行大量表扫描。
分析查询计划以查看指标和识别瓶颈
要查看查询的运行时指标,例如扫描的文件数,请使用EXPLAIN ANALYZE
关键字并了解如何分析查询计划。
只查询您所需的数据
包含WHERE子句
InfluxDB v3 以 Parquet 文件形式存储每个分区的数据。默认情况下,InfluxDB 按日对分区进行集群化存储,但您也可以自定义分区数据。查询时,InfluxDB 从对象存储中检索文件以回答查询。为了减少查询需要从对象存储检索的文件数量,请包含一个WHERE
子句,通过时间范围或特定标签值过滤数据。
仅选择需要的列
由于 InfluxDB v3 是列式数据库,它只处理查询中选择的列,这可以减轻宽模式对查询性能的影响。
然而,从宽模式中检索大量列的非特定查询可能比更具针对性的查询慢且效率低——例如,考虑以下查询
SELECT time,a,b,c
SELECT *
如果表包含10列,两个查询之间的性能差异很小。在一个包含超过1000列的表中,SELECT *
查询会更慢且效率更低。
分析和调试查询
了解如何分析查询计划以诊断查询并找到性能瓶颈。
如果您需要帮助诊断,请遵循指南报告查询性能问题。
这个页面有帮助吗?
感谢您的反馈!