Оптимизировать поиск дубликатов n-uplets между двумя таблицами - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу вычислить дубликаты 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 ...

Мой запрос должен получить TOTO и TITI из таблицы A.

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

Этот запрос работает, но у меня 10k n-upletsв таблице A и 40k в таблице B. Выполнение медленное: /

Есть идеи по его оптимизации?

Заранее спасибо:)

1 Ответ

0 голосов
/ 20 декабря 2018

Вам нужны некоторые индексы.Поскольку у вас есть условие OR, я бы создал два индекса:

create index ix1 on tableb (lastname, firstname);

create index ix2 on tableb (email);

Условие OR требует двух сканирований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...