如何提高与“ LIKE”链接的左联接(Oracle SQL)的性能

时间:2019-11-28 08:58:09

标签: sql oracle left-join

我在使用LIKE进行联接的联接性能方面遇到一些问题。下面介绍一个示例设置。 Table1在一天的时间内最多增长几千行。 Table2是一个查找表,大小恒定,只有几十个条目。随着将更多数据添加到表1中,查询性能将大大恶化,以致实际上变得无法使用。

我在Table1.EntityTable2.EntityJoin上有索引

我已经用通配符EntityJoin的值来构建表,因此前端可以定义将相似的实体名称映射到特定组的过滤器。在我看来,从用户的角度来看,能够使用通配符而不是必须从Table2中的Table1中定义每个实体名称来提高效率(请注意,此结构是一个简化的示例)。

我已经阅读了一些有关联接性能的类似文章,但是没有看到任何使用LIKE的方式。

表1:

------------------------
Entity
------------------------
AnEntity1
AnEntity2
OtherEntity1
Other3Entity
Other12Entity
MoreEntities2
EvenMore3Entities5
------------------------

表2:

---------------------------------
EntityJoin     | JoinName
---------------------------------
An%            | SomeVal
Other%         | SomeVal
More%          | SomeOtherVal
---------------------------------

查询

select 
    *
from
    Table1 T1
    left join Table2 T2
        on T1.Entity like T2.EntityJoin;

1 个答案:

答案 0 :(得分:0)

最好的查询结果是 在表1上进行全表扫描 和表2的嵌套循环。

这是因为您必须检查t1中的每个条目是否与t2中的任何条目匹配。

T2

---------------------------------
EntityJoin     | JoinName
---------------------------------
An%            | SomeVal
A%             | SomeVal
AnE%           | SomeOtherVal
---------------------------------

将是可能的,并且输入:

AnEntity1
AnEntity2

将增加三倍。

因此,您必须考虑可以做些什么以提高选择性。