为什么GROUP_CONCAT使查询更快?

时间:2019-03-04 20:58:24

标签: mysql sql performance

我有一个很大的MySQL表,正在其中寻找重复项。我通过执行类似的操作来找到电子邮件地址的完全匹配项:

SELECT email FROM customers WHERE email != '' GROUP BY email HAVING COUNT(*) > 1

此查询大约需要1.5秒才能运行。

但是,如果我将GROUP_CONCAT添加到选择查询中,则它最多只能将其加快半秒。例如,这两个程序都在大约半秒内运行:

SELECT GROUP_CONCAT(id), email FROM customers WHERE email != '' GROUP BY email HAVING COUNT(*) > 1;
SELECT GROUP_CONCAT(email) FROM customers WHERE email != '' GROUP BY email HAVING COUNT(*) > 1;

谁能解释为什么添加GROUP_CONCAT使其返回更多数据,从而加快查询速度?

当我对两个查询都进行解释时,没有GROUP_CONCAT的版本会显示“使用位置;使用临时;使用文件排序”,而具有GROUP_CONCAT的版本会显示“使用位置;使用文件排序”

所以我想添加GROUP_CONCAT使其不使用临时表,从而加快了速度?有没有办法解决?因为我真正想要的只是电子邮件地址列表,所以我可以执行以下操作:

SELECT * FROM customers WHERE email IN ([above query]);

我创建了一个模拟模式和数据,以了解https://www.db-fiddle.com/f/aTPCPEjy5mp1EgLuvTjaUr/2

的不同之处

详细信息: 运行MySQL 5.6.36 我实际使用的客户表有126,633条记录,其中113,053条是不同的电子邮件记录。其中4,730封电子邮件为空。

0 个答案:

没有答案