簡體   English   中英

從 AWS Athena 中的另一個表使用時,SQL Like Operator 非常慢

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

我在 athena 中有 SQL 查詢,當使用另一個表中的 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 值不是固定的,它可以在時間之前更改,這就是為什么我需要使用另一個表中的值。

請建議最快的方法

“慢”是一個相對術語,但連接兩個表的查詢總是比不連接的查詢 與需要在查詢時在另一個表中查找的模式進行比較的查詢總是比使用靜態模式的查詢

這是否意味着第二個查詢很慢? 也許吧,但您必須基於您實際要求查詢引擎執行的操作。

讓我們剖析一下您的查詢正在做什么:

  • 外部查詢查找第一個表的所有行的所有列,其中一列包含特定字符串。
  • 通過掃描第二個表中的每一行,尋找具有特定id列值的行,動態查找該字符串。

換句話說,第一個查詢只掃描第一個表,而第二個查詢掃描兩個表。 這總是會更慢,因為它做了更多的工作。 還有多少工作? 這取決於桌子的大小。 您沒有指定任何查詢的運行時間或表的大小,因此很難知道。

您沒有在問題中提供足夠的上下文來回答比這更精確的問題。 我們只能用一般性來回應,例如:如果它很慢那么不要使用LIKE ,那是一個緩慢的操作。 不要執行讀取整個第二個表的相關子查詢,這很慢。

我找到了其他相同的方法,它在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM