mysql - 加快 MySQL 连接检查重复项

标签 mysql duplicates performance indexed

我正在使用以下查询返回所有具有相同名字和姓氏的重复记录。诀窍在于 contact_id 必须按降序排列。

查询按预期返回了联系人,但速度太慢了!检查大约 30,000 条记录时大约需要 6-8 秒。

我在数据库中索引了 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` 

最佳答案

不做任何 promise ,但这里有一个替代方案可以尝试:

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

关于mysql - 加快 MySQL 连接检查重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299113/

相关文章:

mysql - 存储/索引之前的 REVERSE() 电子邮件地址,或不?

php - 当我尝试插入 ip2long 整数时,错误的整数被插入到表中

mysql - 在 mariaDB 中跳过锁定的替代方法

如果文件名已经存在,Python 将文件复制到新目录并重命名

database - PostgreSQL 中是否有针对大型二进制数据的透明重复数据删除?

c# - 尽可能晚地声明变量并将返回方法作为参数传递

PHP:带有字符串的 switch-case 语句效率低吗?

mysql - fatal error : Call to a member function num_rows() on boolean in C:\xamp\htdocs\project24\system\database\DB_driver. php 第 768 行

php - php中Mysql数据库行值获取问题

matlab - 我如何判断矩形矩阵是否在 MATLAB 中有重复的行?