首页 > 解决方案 > has_any 64 个值后的性能坦克

问题描述

我有一个查询,该查询通过使用 has_any 过滤动态对象中的值的优化执行得非常好。

突然它的性能下降了,我注意到当列表的值超过 64 个时会发生这种情况。

以下是一些在 has_any() 中使用的值越来越多的统计数据:

limit 10 totalcpu 58s, datascanned 9.1GB limit 20 totalcpu 63s, datascanned 13.2GB limit 30 totalcpu 80s, datascanned 17.5GB limit 40 totalcpu 92s, datascanned 21.8GB limit 60 totalcpu 124s, datascanned 30.3GB limit 64 totalcpu 130s, datascanned 32.1GB limit 65 totalcpu 12412s, datascanned 930GB limit 70 totalcpu 12263s, datascanned 868GB limit 80 totalcpu 13410s, datascanned 1.9TB

标签: azure-data-explorer

解决方案


has_any() 在一定限制后在内部将自身重写为正则表达式(现在是 64 个值,将来它可能会增长 - 但仍然:存在限制)。如果您发现自己在动态数组中寻找特定元素 - 您可以尝试 set_intersect() 函数: https ://docs.microsoft.com/en-us/azure/kusto/query/setintersectfunction

使用此功能将检查:

... | 其中 array_length(set_intersect(source,lookup_array))>0


推荐阅读