SQL Like Operator 在 AWS Athena 中从另一个 table 使用时非常慢

SQL Like Operator very slow when using from Another table in AWS Athena

我在 athena 中有 SQL 查询,当使用来自另一个 table

的 like 运算符值时,它非常慢
Select * from table1 t1
Where t1.value like (select 
concat('%',t2.value,'%') as val 
from table2 t2 where t2.id =1 
limit 1)

上面的查询很慢

当我使用类似下面的查询时,它的工作速度超快

Select * from table1 t1
Where t1.value like 
'%somevalue%'

在我的场景中,like 值不是固定的,它可以随时更改,这就是为什么我需要使用另一个 table.

的值

请建议最快的方式

“慢”是一个相对术语,但连接两个 table 的查询总是比不连接的查询 。与需要在查询时在另一个 table 中查找的模式进行比较的查询总是比使用静态模式的查询

这是否意味着第二个查询很慢?也许可以,但是您必须基于您实际要求查询引擎执行的操作。

让我们分析一下您的查询在做什么:

  • 外部查询查找第一个 table 的所有行的所有列,其中一列包含特定字符串。
  • 通过 扫描第二个 table 中的每一行以查找具有 id 列的特定值的行来动态查找该字符串。

换句话说,第一个查询仅扫描第一个 table,而第二个查询扫描两个 table。这总是会变慢,因为它做了更多的工作。还有多少工作?这取决于 table 的大小。您没有指定任何查询的 运行 次或 table 的大小,因此很难知道。

您没有在问题中提供足够的上下文来回答比这更准确的问题。我们只能笼统地回应:如果它很慢,那么不要使用 LIKE,那是一个缓慢的操作。不要执行读取整个秒的相关子查询 table,那很慢。

我已经找到了相同的其他方法,并且在 Athena 中速度超级快

Select * from table1 t1
Where POSITION ( (select concat('%',t2.value,'%') as val from table2 t2 where t2.id =1 limit 1) in t1.value   )>0