数据库查询语句优化,mysql优化,join语句优化附带YYC松鼠短视频系统详细demo效果-阿里云开发者社区

开发者社区> 一颗优雅草科技> 正文

数据库查询语句优化,mysql优化,join语句优化附带YYC松鼠短视频系统详细demo效果

简介:
+关注继续查看

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

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

0

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

这是反馈来的查询代码,也就是有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 我们开始进入内部技术讨论环节

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

1
2

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

3
4

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

5
6

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

7
8

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

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

RPReplay_Final1583981855

最终成果展示

//通过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;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设计高效合理的MySQl查询语句?23种常用类型汇总(珍藏版)
MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。
1139 0
拒绝卡顿,揭秘盒马鲜生 APP Android 短视频秒播优化方案
短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留。因此,体验的优化就显得尤为重要。上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 Android 端的优化。
175 0
CDN高级技术专家周哲:深度剖析短视频分发过程中的用户体验优化技术点
深圳云栖大会已经圆满落幕,在3月29日飞天技术汇-弹性计算、网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了《海量短视频极速分发》的主题分享,带领我们从视频内容采集、上传、存储和分发的角度介绍整体方案,并且重点讲解短视频加速的注意事项和用户体验优化要点。
5110 0
Serverless 工程实践 | Serverless 应用优化与调试秘诀
本文将以阿里云函数计算为例,提供了在线调试、本地调试等多种应用优化与调试方案。
173 0
15
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载