回答

收藏

为什么这个MySQL查询这么慢?

技术问答 技术问答 124 人阅读 | 0 人回复 | 2023-09-12

我们正试图在可容忍的时间内查询:2 [% _1 p$ N. y" M  N/ h* p) F4 P+ x
SELECT `User`.`id`,FROM `users` AS `User` LEFT JOIN `attempts` AS `Attempt` ON (`Attempt`.`user_id` = `User`.`id` AND `Attempt`.`test_id` != 875) LEFT JOIN `resumes` AS `Resume` ON (`Resume`.`user_id` = `User`.`id`) WHERE `Attempt`.`test_id` = 964 AND `Attempt`.`score` > 10 AND `Resume`.`has_file` = 1 AND `Resume`.`user_id` = `User`.`id`共有5万个用户行。, Q8 r9 g7 i+ T4 q5 L2 D5 C" O7 I6 G
当aLIMIT当等于或小于1000时,查询几乎是瞬间的。然而,如果没有限制,它将在300秒(我们的测试环境中允许的最大值)后加班。( @; n; N' w5 a5 a( v9 ^
我们需要能够在10秒或更短的时间内返回查询的所有结果。有时,这大约是1万份记录。这不现实吗?或者我们所做的不是最理想的事情,这使得查询如此缓慢。$ O( b% ]& u8 M& @, _, U
如果相关的话,当我从命令行(而不是通过我的)PHP运行此查询时,即使返回10K记录,它也很快。
8 p$ m+ {; w+ S更新:EXPLAIN显示索引不用于已连接的表之一8 Z. P1 \+ l5 Z$ c+ G0 M- f
                                                               
/ x8 M2 c+ @; C; m/ ?1 O% S    解决方案:                                                               
9 D. q( F: r- _! R# [5 u                                                                您JOIN和的WHERE就像我上面的评论中提到的问题一样,句子很混乱。
# R# R1 F2 b- U" ]0 q4 n. E试试这个:: M4 Q0 J6 ]0 C, p0 j
SELECT `User`.`id`FROM `users` AS `User` INNER JOIN `attempts` AS `Attempt` ON `Attempt`.`user_id` = `User`.`id` INNER JOIN `resumes` AS `Resume` ON `Resume`.`user_id` = `User`.`id`WHERE `Attempt`.`test_id` =     AND `Attempt`.`score` >    AND `Resume`.`has_file` =
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则