我有下表
id | firstname | lastname | email | date
1 | steven | smith | steven@gmail.com 2013-06-10 04:01:25
2 | Bill | Johnson | bill@gmail.com | 2014-06-10 04:01:25
3 | steven | smith | steven@gmail.com | 2014-10-10 12:01:25
此查询返回具有最新日期的电子邮件 因此,它将返回第2行和第3行。它不会返回第1行,因为日期低于第3行的日期
SELECT DISTINCT
us.email,
us.*
FROM
`users` AS us
WHERE us.`users` =
(SELECT
MAX(`date`)
FROM
`users` AS u
WHERE u.email = us.email)
该查询适用于少量数据,但是当我尝试在40k行上运行它时需要很长时间。超过5分钟
查询是我之前提出的问题的答案,所以sql小提琴链接
答案 0 :(得分:1)
正如我在评论中所说,在相应列中添加一个索引 http://dev.mysql.com/doc/refman/5.0/en/create-index.html
答案 1 :(得分:0)
您可以尝试在电子邮件列上添加索引(在创建表后运行此代码):
CREATE INDEX i_users_email
ON users (email);