优化两个表之间重复的n-uplet的搜索

时间:2018-12-19 21:48:53

标签: mysql symfony doctrine

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

假设我们有两个表:

表A :(名字,姓氏,电子邮件...)

N个片段:

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

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

表B :(名字,姓氏,电子邮件...)

N个片段:

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中有1万个n-uplet,在表B中有40k。执行速度很慢:/

有什么优化建议吗?

预先感谢:)

1 个答案:

答案 0 :(得分:0)

您需要一些索引。由于您有一个OR条件,因此我将创建两个索引:

create index ix1 on tableb (lastname, firstname);

create index ix2 on tableb (email);

OR条件需要进行两次扫描。