Mysql 加快sql查询并修复联接
我有下面的查询,它列出了所有与facebook帐户匹配的帐户-问题是,facebook表中有时有多行与连接匹配,然后我们会返回重复的行,即使ac.id AS id应该是唯一的主键Mysql 加快sql查询并修复联接,mysql,sql,Mysql,Sql,我有下面的查询,它列出了所有与facebook帐户匹配的帐户-问题是,facebook表中有时有多行与连接匹配,然后我们会返回重复的行,即使ac.id AS id应该是唯一的主键 SELECT ac.id AS id , ac.first_name , ac.last_name , ac.email , ac.company_name , upd8r_facebook_accts.id AS fb FROM upd8r_user_accts ac LEFT
SELECT ac.id AS id
, ac.first_name
, ac.last_name
, ac.email
, ac.company_name
, upd8r_facebook_accts.id AS fb
FROM upd8r_user_accts ac
LEFT OUTER JOIN upd8r_facebook_accts
ON ac.id = upd8r_facebook_accts.user_id
WHERE ac.`rfid` = ''
AND ac.last_name != ''
AND ac.`owner_id` = '121'
ORDER BY ac.`last_name` ASC
有两个问题是返回了重复的行(我认为当facebook表中有多行与upd8r\u用户\u accts.id匹配时会出现这种情况。查询需要10秒才能运行……我在upd8r\u用户\u accts.id上有一个索引,我认为这可能会有所帮助,但它没有提示:
- 对
或on
WHERE
- 更改
方法选择
选择直线连接
SELECT ac.id AS id, ac.first_name, ac.last_name, ac.email, ac.company_name, upd8r_facebook_accts.id AS fb
FROM upd8r_user_accts ac
LEFT OUTER JOIN upd8r_facebook_accts ON ac.id = upd8r_facebook_accts.user_id
WHERE ac.`rfid` = ''
AND ac.last_name != ''
AND ac.`owner_id` = '121'
AND upd8r_facebook_accts.id = (SELECT MAX(ufa.id) FROM upd8r_facebook_accts ufa WHERE ufa.user_id = ac.id)
ORDER BY ac.`last_name` ASC
这样做的效果是每个用户只显示一行,但请记住,它删除的行可能不是您希望从结果中删除的行。
它还假设您可以在Id列上执行MAX功能。请尝试upd8r\u facebook\u accts.user\u Id字段上的GROUP BY。索引应位于外键upd8r\u user\u accts.user\u Id上。此外,您的速度问题可能与rfid、owner\u Id和last\u name字段有关,您甚至可以在这些字段上订购。您可以向我们显示执行计划吗?(使用EXPLAIN infront运行查询)