Ускорить MySQL присоединиться, чтобы проверить наличие дубликатов - PullRequest
1 голос
/ 10 июня 2011

Я использую следующий запрос, чтобы вернуть все повторяющиеся записи с одинаковыми именем и фамилией.Хитрость в том, что contact_id должен быть в порядке убывания.

Запрос возвращает контакты, как и ожидалось, но это просто ТАК МЕДЛЕННО!Занимает около 6-8 секунд при проверке около 30 000 записей.

У меня есть contact_firstName, contact_lastName, contact_client_id и contact_id, все проиндексированы в базе данных.

Любые идеи, которые я мог бы сделать, чтобы попробовать иускорить это немного?Спасибо за вашу помощь:)

SELECT z.contact_id, z.contact_firstName, z.contact_lastName, RIGHT(z.contact_lastName,1) AS nameNum
FROM (`contacts` x) 
JOIN `contacts` z ON `x`.`contact_firstName` = `z`.`contact_firstName` 
AND x.contact_lastName = z.contact_lastName 
AND x.contact_client_id = ".$ID." 
AND z.contact_client_id = ".$ID." 
WHERE `x`.`contact_id` < `z`.`contact_id` 
GROUP BY `z`.`contact_id` 

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Не обещаю, но есть альтернатива:

SELECT c.contact_id, c.contact_firstName, c.contact_lastName, RIGHT(c.contact_lastName,1) AS nameNum
    FROM (SELECT contact_firstName, contact_lastName, MIN(contact_id) AS MinID
              FROM contacts
              WHERE contact_client_id = ".$ID."
              GROUP BY contact_firstName, contact_lastName
              HAVING COUNT(*) > 1) t
        INNER JOIN contacts c
            ON t.contact_firstName = c.contact_firstName
                AND t.contact_lastName = c.contact_lastName
                AND c.contact_client_id = ".$ID."
                AND t.MinID <> c.contact_id
0 голосов
/ 10 июня 2011
SELECT z.contact_id, z.contact_firstName, z.contact_lastName
, RIGHT(z.contact_lastName,1) AS nameNum
FROM `contacts` x
JOIN `contacts` z ON (x.contact_client_id = z.contact_client_id)
WHERE `x`.`contact_id` < `z`.`contact_id` 
And x.contact_client_id = '$id'
GROUP BY `z`.`contact_id` 

Убедитесь, что у вас есть индекс:
- contact_id.
- contact_client_id

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