V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
websql
V2EX  ›  问与答

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

  •  1
     
  •   websql · Sep 11, 2022 · 1573 views
    This topic created in 1336 days ago, the information mentioned may be changed or developed.
    数据库只有一张表
    字段: 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 个多月,能力暂时有限,特地求教各位大神有什么好的解决方案吗?
    gjquoiai
        1
    gjquoiai  
       Sep 11, 2022
    一来查询相互之间没有依赖关系的话可以并发去查,二来看上去都是统计数据完全可以容忍数据延迟,看能容忍多少定期查好了存起来就行
    summerwar
        2
    summerwar  
       Sep 12, 2022
    查数据库,然后结果存 redis 等缓存里,设置一个有效期,以后每次查询时先查缓存里有数据没,有数据直接返回数据,没有数据再去数据库查询,查询完继续存缓存里,设置有效期,以此类推
    websql
        3
    websql  
    OP
       Sep 14, 2022
    @gjquoiai
    数据是能容忍延迟的,只需要展现前一天的排行数据即可,不是要求实时的展现。
    不懂您说的并发查,能有代码示例,或者是搜索的关键词,提示一下吗?刚入门,知识体系不完善,谢谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2563 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:06 · PVG 00:06 · LAX 09:06 · JFK 12:06
    ♥ Do have faith in what you're doing.