首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用缓存加速mysql查询

如何使用缓存加速mysql查询
EN

Database Administration用户
提问于 2016-12-26 05:01:54
回答 1查看 257关注 0票数 1

我正在使用下面的查询来创建本周排名前十的人的领导板。

代码语言:javascript
复制
SELECT 
users.id, 
concat(users.first_name, ' ', users.last_name) as name, 
users.picture_url, 
MAX(rounds.speed) as speed, 
AVG(rounds.accuracy) as accuracy, 
SUM(rounds.score) as score, 
users.level 
FROM users INNER JOIN rounds ON users.email=rounds.email 
WHERE DATE(rounds.dateTime) BETWEEN CURDATE()-INTERVAL 1 WEEK AND CURDATE() 
GROUP BY users.id  
ORDER BY score DESC, speed DESC 
LIMIT 10

目前,运行此查询需要大约6秒时间。这张桌子的“圆圈”大约有3000行。很快它就会大得多。因此,一旦用户打开领导板,它需要超过6秒的加载!

是否有任何方法来缓存或改进查询,使其加载得更快?

数据库: MySQL后端: PHP5框架:代码点火器

EN

回答 1

Database Administration用户

发布于 2016-12-26 17:55:11

(1)考虑设计模式,以便加入users.id,而不是users.email。这将导致一种更好的方法来制定查询--通过在加入users之前计算聚合。

(2)不要在函数中隐藏索引列;不能使用索引。而不是

代码语言:javascript
复制
WHERE DATE(rounds.dateTime) BETWEEN CURDATE()-INTERVAL 1 WEEK
                                AND CURDATE() 

使用

代码语言:javascript
复制
WHERE dateTime >= CURDATE() - INTERVAL 1 WEEK
  AND dateTime  < CURDATE()

(3)综合指数:

代码语言:javascript
复制
INDEX(email, dateTime)   -- after doing (2)
INDEX(dateTime)  -- after doing both (1) and (2)
票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/159162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档