【发布时间】:2016-02-02 17:12:46
【问题描述】:
我的数据库中有两张表,如下:
CREATE TABLE `users` (
`id` varchar(10) DEFAULT NULL,
`gender` varchar(9) DEFAULT NULL,
`age` varchar(5) DEFAULT NULL
KEY `id` (`id`)
)
CREATE TABLE `sessions` (
`user_id` varchar(10) DEFAULT NULL,
`time` int(11) DEFAULT NULL,
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
users 表有大约 200,000 行,sessions 表有大约 10m 行。我正在尝试做一个简单的JOIN,如下:
SELECT users.id, SUM(sessions.time) AS TotalTime,
FROM users
LEFT OUTER JOIN sessions
ON users.id = sessions.user_id
GROUP BY users.id
LIMIT 1;
当我运行这个查询时,即使将 LIMIT 设置为 1,它也会无休止地运行而没有结果。如果我省略 GROUP BY 子句,它会立即运行。我可能在这里遗漏了什么,或者仅仅是会话表太大而无法有效工作?
提前感谢您的帮助!
【问题讨论】:
-
尝试为
users.id和sessions.user_id添加索引。 -
@Oleander
KEY不是暗示索引吗? -
你能发布 EXPLAIN 查询输出吗?
-
为什么要使用左连接?只是问,你不能减少到内部加入,只为存在的用户选择会话。