MYSQL查询占用太多时间和超时
我正在尝试调试一个MYSQL查询,因为它在一台服务器上花费了大约4-5分钟的时间,而在另一台MYSQL服务器上却失败了 查询如下:MYSQL查询占用太多时间和超时,mysql,sql,Mysql,Sql,我正在尝试调试一个MYSQL查询,因为它在一台服务器上花费了大约4-5分钟的时间,而在另一台MYSQL服务器上却失败了 查询如下: SELECT *, TM.tutor_id as tutor_id, TIMESTAMPDIFF( YEAR, birthdate, CURDATE( ) ) AS age from tutor_master as TM LEFT JOIN category_
SELECT
*,
TM.tutor_id as tutor_id,
TIMESTAMPDIFF( YEAR, birthdate, CURDATE( ) ) AS age
from
tutor_master as TM
LEFT JOIN category_master as CM
on TM.category = CM.category_id
LEFT JOIN tutor_expected_rate TER
ON FIND_IN_SET( TER.tutor_id, TM.tutor_id ) > 0
LEFT JOIN admin_shortlist_master SHM
ON TM.tutor_id = SHM.tutor_id
AND (SHM.user_auth_id = 'c84258e9c39059a89ab77d846ddab909')
INNER JOIN level_master LM
ON FIND_IN_SET(LM.level_id, TER.level_id) > 0
WHERE
1=1
GROUP BY
TM.tutor_id
order by
TM.is_priority DESC,
TM.tutor_id DESC
LIMIT
0, 10
1 SIMPLE TM NULL ALL PRIMARY,tutor_id NULL NULL NULL 27530 100.00 Using temporary; Using filesort
1 SIMPLE SHM NULL ref tutor_id,user_auth_id user_auth_id 257 const 1 100.00 Using where
1 SIMPLE CM NULL eq_ref PRIMARY PRIMARY 4 toprecru_portal_db.TM.category 1 100.00 NULL
1 SIMPLE LM NULL ALL NULL NULL NULL NULL 11 100.00 Using join buffer (Block Nested Loop)
1 SIMPLE TER NULL ALL NULL NULL NULL NULL 13223 100.00 Using where; Using join buffer (Block Nested Loop)
结果如下:
SELECT
*,
TM.tutor_id as tutor_id,
TIMESTAMPDIFF( YEAR, birthdate, CURDATE( ) ) AS age
from
tutor_master as TM
LEFT JOIN category_master as CM
on TM.category = CM.category_id
LEFT JOIN tutor_expected_rate TER
ON FIND_IN_SET( TER.tutor_id, TM.tutor_id ) > 0
LEFT JOIN admin_shortlist_master SHM
ON TM.tutor_id = SHM.tutor_id
AND (SHM.user_auth_id = 'c84258e9c39059a89ab77d846ddab909')
INNER JOIN level_master LM
ON FIND_IN_SET(LM.level_id, TER.level_id) > 0
WHERE
1=1
GROUP BY
TM.tutor_id
order by
TM.is_priority DESC,
TM.tutor_id DESC
LIMIT
0, 10
1 SIMPLE TM NULL ALL PRIMARY,tutor_id NULL NULL NULL 27530 100.00 Using temporary; Using filesort
1 SIMPLE SHM NULL ref tutor_id,user_auth_id user_auth_id 257 const 1 100.00 Using where
1 SIMPLE CM NULL eq_ref PRIMARY PRIMARY 4 toprecru_portal_db.TM.category 1 100.00 NULL
1 SIMPLE LM NULL ALL NULL NULL NULL NULL 11 100.00 Using join buffer (Block Nested Loop)
1 SIMPLE TER NULL ALL NULL NULL NULL NULL 13223 100.00 Using where; Using join buffer (Block Nested Loop)
现在我的问题是,是否存在任何明显的错误,我忽略了这些错误,以提高查询效率。
谢谢。选择两次列确实没有意义。正如@草莓所说,不要选择两次列,但即使选择两次,也不应该执行10条记录这么长时间。您的表必须非常大并且没有索引。查看indexes@Joshi . . . 从一个简单的查询开始(比如从一个表开始)。一次添加一个表。找出什么花费的时间最多。然后再问另一个问题。请列出您在所有相关表格中定义的所有索引及其字段。在_set()中查找_时加入无法使用索引,速度会很慢。因此,您可能需要重新设计数据结构。请向我们展示表格结构和以逗号分隔格式存储数据的表格中的示例数据。此外,您没有聚合函数,因此我真的不知道您认为GROUPBY子句对您有什么作用。