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_

我正在尝试调试一个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_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子句对您有什么作用。