MySql:让这个查询更快......有办法吗?

时间:2010-05-26 14:03:17

标签: mysql performance

共有4个表:

  • 书籍:id,name,author,ecc ...
  • 类别:id,名称
  • 图书馆:id,name,street,city,ecc ..
  • bookcorr:book_id,category_id,library_id

Ids都是按键。

查询必须显示已定义库中包含书籍数量的类别。例如:

  

图书馆X

     

浪漫(50)

     

黄色(40)

     

科学(30)

这是我的疑问:

SELECT category.id
     , category.name
     , count(*)      AS tot
  FROM bookcorr  
  JOIN category 
    ON category.id = bookcorr.category_id 
WHERE bookcorr.library_id = 'x' 
GROUP BY bookcorr.category_id 
ORDER BY tot DESC

并且它仍然很慢,有没有办法让结果更快?

2 个答案:

答案 0 :(得分:1)

你对这些表有什么指数?该查询表明bookcorr应该在(category_id, library_id)上有索引。

您的查询未使用BooksLibrary ...

答案 1 :(得分:1)

更改查询,使其在首要表的列上进行分组,以避免Using temporary

SELECT  category.id, category.name, COUNT(*) AS tot
FROM    category
JOIN    bookcorr
ON      bookcorr.category_id = category.id
WHERE   bookcorr.library_id = 'x'
GROUP BY
        category.id
ORDER BY
        tot DESC

并确保您在bookcorr (library_id, category_id)

上有索引