我花了很长时间试图弄清楚为什么这个查询会杀死我的服务器:
# Query_time: 1781.559941 Lock_time: 0.000060 Rows_sent: 0 Rows_examined: 7576453128
SET timestamp=1460479284;
SELECT r.user
FROM questions q, results r
WHERE r.user = 0
AND r.user=q.user
GROUP BY q.user
LIMIT 1;
results
中有 9,891,888 条记录,questions
中有 7000 条记录。
在我看来,这没有意义。
我在两个表中都在user
设置了索引。
答案 0 :(得分:1)
当您获取r.user
时,这个查询的确切含义是什么?在我看来,您可以使用INNER JOIN
获得相同的结果。
答案 1 :(得分:0)
我会尝试这个......但你应该试着看一下解释计划。我认为group by可能导致速度减慢,所以我把它拿出来放入普通的连接语法。也可能想要查看大表上索引的运行状况,并确保它没有碎片(尝试重建它)
SELECT r.user
FROM questions q inner join results r on r.user=q.user
WHERE r.user = 0
LIMIT 1;
HTH
答案 2 :(得分:0)
尝试此查询:
SELECT `user` FROM `questions`
INNER JOIN `results`
ON `user`.`user`=`results`.`user`
WHERE `user`.`user` = 0
GROUP BY `user`.`user`
LIMIT 1;
如果不能正常工作,您可以为表用户和问题编写创建表吗?