如何在MySQL中改进SELECT子查询?

时间:2015-09-22 20:25:02

标签: mysql subquery query-performance

我有一张桌子学生和第二本有能力的书籍。我试图获得一份学生名单以及他们拥有的书籍数量。

"SELECT 
    StudentID, 
    FullName,
    book_count.ct
FROM 
    students
LEFT JOIN (
    SELECT
        StudentID,
        COUNT(DISTINCT id) AS ct
    FROM
        books
    GROUP BY
        StudentID
    ) AS book_count
ON 
    book_count.StudentID = students.StudentID
ORDER BY
    students.FullName ASC
LIMIT 0, 30;

这个查询大约需要6秒钟,随着更多书籍的增加,它会越来越慢。查看查询配置文件> 90%的时间是花费"复制到临时表"。问题是我的子选择查询得到了书籍的数量,并且总计了整个书籍表,无论我有多少学生可以查看,在我的情况下是30。如何提高性能呢?谢谢。

1 个答案:

答案 0 :(得分:1)

将其更改为

$(el).trigger({type: 'keypress', which: 13, keyCode: 13});

在学生列中的FullName上添加索引 书中的学生ID和学生ID。