我有两张桌子。我无法透露任何关于它们的信息,所以我嘲笑它们的结构:
人(至少9000条记录):
+---------------+-------------+
| Column | type |
+---------------+-------------+
| person_id | int(11) | Primary Key
| name | varchar(255)|
| company_id | int(10) |
+-----+---------+-------------+
登录(超过1000000条记录):
+---------------+-------------+
| Column | type |
+---------------+-------------+
| id | int(11) | Primary Key
| person_id | int(11) |
| date | datetime |
+-----+---------+-------------+
每次登录都是登录表中的记录。 我必须用最新的登录信息列出来自不同公司的人(当时在给定公司的所有人)。
到目前为止我的查询:
SELECT a.name, b.date
FROM person a JOIN login b ON a.person_id = b.person_id
WHERE company_id = ?
GROUP BY b.person_id
ORDER BY b.date DESC
这需要4到11秒,具体取决于公司,这似乎非常缓慢。在一家公司中,可能有数百人登录数千次,登录表可能非常大。