gpt4 book ai didi

mysql查询优化

转载 作者:行者123 更新时间:2023-11-29 01:00:26 25 4
gpt4 key购买 nike

SELECT
b.categoryid,
SUM(viewcount) AS cnt,
categoryname
FROM
bookvisit AS bv
INNER JOIN book AS b ON b.isbn = bv.isbn
LEFT JOIN category AS c ON b.categoryid = c.categoryid
WHERE
b.categoryid IS NOT NULL AND
b.categoryid <> 0
GROUP BY
b.categoryid
ORDER BY
cnt DESC,
bv.isbn
LIMIT 0, 4

我有三个表 -书籍(包含书籍信息)bookvisit(图书访问信息)类别(类别主)

我需要的是流行类别,上面的查询可以用两个 eq_ref 但它有一个使用临时的;也使用文件排序

有什么帮助吗?

最佳答案

根据您昨天的评论,我认为问题是您在计算(聚合)列上执行 ORDER BY,因此它不能使用索引。

解决此问题的唯一方法是添加一个 category.viewcount 列,您在更新 book.viewcount 时也会更新该列。它不会占用太多额外空间。此解决方案的缺点是:

  1. 当一本书的类别发生变化时(我认为这种情况很少见),您需要从旧类别中减去 book.viewcount 并将其添加到新类别中
  2. 类别表上的锁争用可能是一个性能问题

如果这是我并且性能很重要,我会编写一个单独的服务,在启动时将当前统计信息读入内存,并让系统向它发送更新并查询它以获取最新统计信息。这节省了锁定和编写类别表。

当然,如果数字不必是 100% 最新的,您始终可以通宵运行查询并缓存当天的结果。

关于mysql查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com