查询1781年代 -

时间:2016-04-12 17:09:23

标签: php mysql

我花了很长时间试图弄清楚为什么这个查询会杀死我的服务器:

# 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设置了索引。

3 个答案:

答案 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;

如果不能正常工作,您可以为表用户问题编写创建表吗?