You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多值`in`查询与`has`查询的性能优劣对比咨询

查询性能对比分析

已知条件

  • Table1 包含约10K个唯一ID值
  • Table2 包含数十亿行数据,查询需过滤掉其中约50%的行
  • 列A为仅存储单个Guid值的字符串
  • 列B为存储多个以|分隔的Guid值的字符串

两个查询的性能分析

查询1

let _IDs = Table1 | distinct ID;
Table2 | where A in (_IDs)

这个查询先从Table1提取唯一ID集合,再在Table2中筛选A值属于该集合的行:

  • A是单Guid值,匹配时做的是等值比较,计算成本极低
  • 10K量级的ID集合,查询引擎会自动优化为高效的哈希匹配,不会带来额外性能负担
  • 如果Table2的A列有索引,能直接快速定位符合条件的行,进一步提升效率

查询2

Table2 | where B has "constant-value"

这个查询用has操作符在B列的多Guid拼接字符串中匹配常量值:

  • has是子字符串匹配,需要扫描每个B列字符串的全部内容,计算成本远高于等值匹配
  • B列是多值拼接格式,无法有效利用常规索引(哪怕有全文索引,Guid作为子字符串的匹配效率也远不如等值索引)
  • 面对数十亿行数据,每一行都要执行子字符串检查,哪怕过滤掉50%,整体计算量也会非常庞大

结论

通常情况下,查询1的性能会显著优于查询2。

内容的提问来源于stack exchange,提问作者Philippe Signoret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:57:02