打开网站首页数据库 MySQL 查询次数的疑惑

2022-09-11 16:45:14 +08:00
 websql
数据库只有一张表
字段: 40 个
行数: 30 万行

字段 0 名: studentId
字段 0 作用: 主键,记录 student 唯一 id

字段 1 名: insertTime
字段 1 作用: 记录插入 10 位时间戳

字段 2 名: studentName
字段 2 作用: 记录 student 名字

字段 3 名: studentType
字段 3 作用: 记录 student 的类型:{1:小学、2:初中、3:高中}

字段 3 名: studentHome
字段 3 作用: 记录 student 的家庭住址:城市,区域,街道,小区名称

字段 3 名: studentHit
字段 3 作用: 记录 student 的信息被查看次数


首页第一部分需要展示
查询语句:
本周_属于**小区_所有小学生信息被查询次数_前 8 名的排行榜:
"SELECT studentId, insertTime, studentName, studentImg FROM studentInfo WHERE studentType=1 AND studentHome LIKE '小区名称%' AND week(insertTime)=week(now()) ORDER BY studentHit DESC LIMIT 15;"

本周_属于**小区_所有初中生信息被查询次数_前 8 名的排行榜:
"SELECT studentId, insertTime, studentName, studentImg FROM studentInfo WHERE studentType=2 AND studentHome LIKE '小区名称%' AND week(insertTime)=week(now()) ORDER BY studentHit DESC LIMIT 15;"

本周_属于**小区_所有高中生信息被查询次数_前 8 名的排行榜:
"SELECT studentId, insertTime, studentName, studentImg FROM studentInfo WHERE studentType=3 AND studentHome LIKE '小区名称%' AND week(insertTime)=week(now()) ORDER BY studentHit DESC LIMIT 15;"

本周_全省_所有学生信息被查询次数_前 15 名的排行榜:
"SELECT studentId, insertTime, studentName, studentImg FROM studentInfo AND week(insertTime)=week(now()) ORDER BY studentHit DESC LIMIT 15;"



我的疑问是:
1 、如果首页需要展示的 5 个部分和上面第一部分类似,那么光是一个用户打开首页,就需要查询数据库 5(首页 5 个部分)*4(每部分 4 次查询)=20 次?

2 、即使是针对相关的字段做了索引,查询时间也在 15 毫秒左右,按照疑问 1:如果是打开一次首页需要 20 次查询,那不就是需要 15 毫秒*20=300 毫秒,意味着即使不计算网络延时,单纯只是数据库查询都需要 300 毫秒,如果这样,到实际生产时完全不可用了,新人接触编码 3 个多月,能力暂时有限,特地求教各位大神有什么好的解决方案吗?
772 次点击
所在节点    问与答
3 条回复
gjquoiai
2022-09-11 19:32:38 +08:00
一来查询相互之间没有依赖关系的话可以并发去查,二来看上去都是统计数据完全可以容忍数据延迟,看能容忍多少定期查好了存起来就行
summerwar
2022-09-12 05:21:46 +08:00
查数据库,然后结果存 redis 等缓存里,设置一个有效期,以后每次查询时先查缓存里有数据没,有数据直接返回数据,没有数据再去数据库查询,查询完继续存缓存里,设置有效期,以此类推
websql
2022-09-14 17:57:20 +08:00
@gjquoiai
数据是能容忍延迟的,只需要展现前一天的排行数据即可,不是要求实时的展现。
不懂您说的并发查,能有代码示例,或者是搜索的关键词,提示一下吗?刚入门,知识体系不完善,谢谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/879294

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX