首页 > 解决方案 > 优化两个表之间重复 n-uplets 的搜索

问题描述

我想计算两个表之间的重复 n-uplets(无关联)。

假设我们有两个表:

表 A:(名、姓、电子邮件...)

N-uplets:

TOTO/ TOTO/ TOTO@test.com ...

TITI/ TITI/ TITI@test.com ...

表 B:(名、姓、电子邮件...)

N-uplets:

TOTI/ TOTI/ TOTO@test.com ...

TITI/ TITI/ TATI@test.com ...

我的请求应该从表 A 中得到 TOTO 和 TITI。

   $query = $this->createQueryBuilde('a');
   $query
       ->innerJoin(B::class, 'b',
                  'with',
                   "(a.lastName = b.lastName AND a.firstname = b.firstName) 
                    OR a.email = b.email"
        )
   ;

这个请求有效,但我在表 A 中有 10k n-uplets,在表 B 中有 40k。执行速度很慢:/

有什么优化它的想法吗?

提前致谢 :)

标签: mysqlsymfonydoctrine

解决方案


你需要一些索引。既然你有一个OR条件,我会创建两个索引:

create index ix1 on tableb (lastname, firstname);

create index ix2 on tableb (email);

这种OR情况需要两次扫描。


推荐阅读