我在使用LIKE进行联接的联接性能方面遇到一些问题。下面介绍一个示例设置。 Table1在一天的时间内最多增长几千行。 Table2是一个查找表,大小恒定,只有几十个条目。随着将更多数据添加到表1中,查询性能将大大恶化,以致实际上变得无法使用。
我在Table1.Entity
和Table2.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;
答案 0 :(得分:0)
最好的查询结果是 在表1上进行全表扫描 和表2的嵌套循环。
这是因为您必须检查t1中的每个条目是否与t2中的任何条目匹配。
T2
---------------------------------
EntityJoin | JoinName
---------------------------------
An% | SomeVal
A% | SomeVal
AnE% | SomeOtherVal
---------------------------------
将是可能的,并且输入:
AnEntity1
AnEntity2
将增加三倍。
因此,您必须考虑可以做些什么以提高选择性。