【问题标题】:MySql: make this query faster... is there a way?MySql:让这个查询更快......有没有办法?
【发布时间】:2010-05-26 22:38:18
【问题描述】:

有4张桌子:

  • 书籍:id、姓名、作者、ecc...
  • 类别:ID、名称
  • 图书馆:id、name、street、city、ecc..
  • bookcorr : book_id, category_id, library_id

ID 都是键。

查询必须显示已定义图书馆中图书数量的类别。例如:

库 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

而且还是很慢,有没有办法更快获得结果?

【问题讨论】:

标签: mysql performance


【解决方案1】:

您在这些表上有哪些索引?该查询表明bookcorr 应该在(category_id, library_id) 上有一个索引。

您的查询没有使用BooksLibrary...

【讨论】:

  • "id" 都是索引。在 bookcorr 中,所有字段都是索引。是的,此查询不使用书籍或图书馆,但其他查询是...
  • @robert: 你能在bookcorr上创建一个包含category_id library_id的复合索引吗?
  • 你明白了!我创建了一个复合索引,它的速度提高了 10 倍:D 之前:0.4 秒现在 0.04 秒谢谢!!
【解决方案2】:

更改查询,使其在前导表的列上分组以避免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) 上有一个索引

【讨论】:

  • 此外,此查询使结果更快!谢谢
猜你喜欢
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多