php - 如何加速笛卡尔的 MySQL 查询

标签 php mysql sql

假设有一个名为 contact 的表,其结构如下:

id INT -- primary key,autoincrement,index 
firstname VARCHAR (255),
lastname VARCHAR(255),
type ENUM

执行这样的查询:

SELECT c1.id AS c1_id, c2.id AS c2_id
FROM contact c1
INNER JOIN contact c2 ON c1.firstname = c2.firstname AND c1.lastname = c2.lastname
WHERE c1.id <> c2.id AND c1.type=c2.type

在少量记录上没问题......但是当记录数从 30-40 增长到 1000 时,这个查询非常慢。需要从记录数中抽象出来并尽可能加快这个查询。任何建议?

最佳答案

你可以试试这样的:

SELECT GROUP_CONCAT(DISTINCT id), firstname, lastname
FROM contact
GROUP BY firstname, lastname
HAVING COUNT(DISTINCT id)>1

这将返回所有重复的名称。如果您想要 ID,则可以使用 JOIN:

SELECT
  contact.id
FROM
  contact INNER JOIN (SELECT firstname, lastname
                      FROM contact
                      GROUP BY firstname, lastname
                      HAVING COUNT(DISTINCT id)>1) dup
  ON contact.firstname=dup.firstname AND contact.lastname=dup.lastname

关于php - 如何加速笛卡尔的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19950886/

相关文章:

javascript - 未呈现 PayPal 支付墙 - 错误 "Invalid approval URL"

php - 注册时将用户 ID 插入到另一个表中

php - 为什么在我的本地环境(而在原始服务器上我没有)的 Wordpress 博客文章(仅)上收到错误消息

mysql - 如何创建与 Fusion Tables "summarize"函数等效的 MySQL 查询?

php - laravel中如何用一个表中的值减去另一个表中的值

sql - PostgreSQL - 错误 : SQL state: XX000

php - 我应该在用户输入错误时抛出异常吗?

MySQL如何从一个列中获取数据并放入同一ID和同一表下的另一列

sql - MySQL:哪些索引用于简单范围选择?

sql - ON UPDATE CURRENT_TIMESTAMP 和 JPA