zoukankan      html  css  js  c++  java
  • 数据库查询语句优化,mysql优化,join语句优化附带YYC松鼠短视频系统详细demo效果

    数据库查询语句优化,数据库结构优化,细节以及结果展示,

    始于我们一个比较大的客户他的并发较高用户访问较多,造成CPU过于打紧然后得到了反馈情况。

    首先是收到反馈,并且客户发来一段代码。

    这是反馈来的查询代码,也就是有bug的代码(去年研发系统比较急,优化没做):

    
     
    SELECT
    `v`.`id`,
    `v`.`title`,
    `v`.`url`,
    `v`.`img`,
    `v`.`create_time`,
    `v`.`uid`,
    `v`.`state`,
    `u`.`name`,
    ifnull( u.head_img, 'static/image/head.png' ) head_img,
    count( DISTINCT s1.id ) skr_count,
    ifnull( s.skr, '0' ) skr,
    ifnull( co.create_time, '0' ) collection,
    ifnull( f.id, '0' ) follow,
    count( DISTINCT c.id ) comment_count,
    count( DISTINCT h.id ) view_count 
    FROM
    tp_video v
    LEFT JOIN `tp_skr` `s` ON `v`.`id` = s.vid 
    AND s.type = 0 
    AND '25712' = s.uid
    LEFT JOIN `tp_skr` `s1` ON `v`.`id` = s1.vid 
    AND s1.type = 0
    LEFT JOIN `tp_user` `u` ON `v`.`uid` = `u`.`id`
    LEFT JOIN `tp_follow` `f` ON `v`.`uid` = f.follow_id 
    AND f.uid = '25712'
    LEFT JOIN `tp_collection` `co` ON `v`.`id` = co.vid 
    AND co.uid = '25712'
    LEFT JOIN `tp_view_history` `h` ON `v`.`id` = `h`.`vid`
    LEFT JOIN `tp_comment` `c` ON `v`.`id` = c.vid 
    AND c.pid = 0 
    AND c.type = 0 
    WHERE
    `v`.`state` = 1 
    GROUP BY
    `v`.`id` 
    ORDER BY
    `create_time` DESC 
    LIMIT 0,
    20

    ok 我们开始进入内部技术讨论环节

    第一阶:目前认为索引优化用处不是特别大,但是有一点作用。

    第二阶段:认为需要拆sql数据库

    第三阶:开始质疑拆了是有用吗?讨论拆了以后会好,讨论sql数据量越大越慢,主要是因为全表查询。

    第四阶:用主键索引 然后再拆,再查询

    第五阶:测试并且得出效果,ok,完整成果如下,更新至官方1.9.2版本,效果展示,速度超6666~

     

    YYC松鼠短视频系统1.9.2至此更新效果展示

     

    最终成果展示

    
     
    //通过ID获取已看视频ID
                $vids = Db("view_history")->where(["uid" => $user['id']])->field("vid")->select();
                $ids = array_column($vids, "vid");;
                //通过已看视频ID获取未看视频并通过发布时间倒序排序
                //查询20条视频数据的ID
                $videos = Db("video")->page($page,20)->where(['state'=>1])->whereNotIn('id',$ids)->field("id")->select();
                $videoids = array_column($videos, "id");
                $list = Db("video v")
                    ->whereIn("v.id", $videoids)
                    ->join("skr s", " v.id=s.vid and s.type=0 and '" . $user['id'] . "'=s.uid", "left")
                    ->join("skr s1",  "v.id=s1.vid and s1.type=0", "left")
                    ->join("user u", "v.uid=u.id", "left")
                    ->join("follow f","v.uid=f.follow_id and f.uid = '".$user['id']."'","left")//视频发布者ID等于被关注人ID并且关注用户ID等于当前用户ID
                    ->join("collection co","v.id=co.vid and co.uid = '".$user['id']."'","left")//视频ID等于收藏的视频ID并且收藏的用户ID为当前用户ID
                    ->join("view_history h", "v.id=h.vid", "left")
                    ->join("comment c", "v.id=c.vid and c.pid=0 and c.type=0", "left")
                    ->order("skr desc")
                    ->group("v.id")
                    ->field([
                        "v.id",//视频ID
                    "v.title",//视频标题
                        "v.url",//视频链接
                        "v.img",//视频图片
                        "v.create_time",//视频创建时间
                        "v.uid",//视频对应用户ID
                        "v.state",//视频状态
                        "u.name",//视频发布人名称
                        "ifnull(u.head_img,'static/image/head.png') head_img",//用户头像
                        "count(distinct s1.id) skr_count",//点赞数
                        "ifnull(s.skr,'0') skr",//当前用户是否点赞
                        "ifnull(co.create_time,'0') collection",//当前用户是否收藏
                        "ifnull(f.id,'0') follow",//当前用户是否关注
                        "count(distinct c.id) comment_count",//评论数
                        "count(distinct h.id) view_count",//播放次数
                    ])
                    ->select();
    
                return $list;
    
  • 相关阅读:
    程序员:不要自称为码农
    SpringBoot对静态资源配置
    LeetCode 572. Subtree of Another Tree(子树)
    LeetCode 437. Path Sum III(统计路径和等于sum的路径数量)
    LeetCode 112. Path Sum(判断路径和是否等于一个数)
    LeetCode 617. Merge Two Binary Trees(归并两棵二叉树)
    LeetCode 226. Invert Binary Tree(翻转二叉树)
    Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 的解决办法
    linux-查询某软件的安装的目录
    WebService概念解释
  • 原文地址:https://www.cnblogs.com/yangqiangche/p/12731264.html
Copyright © 2011-2022 走看看