开发直播软件平台,数据表查询优化方案

发布来源:云豹科技
发布人:云豹科技
2021-09-13 10:05:28

直播软件开发,业内通常使用Mysql进行数据库方面的开发,以下是云豹科技常用的几种数据表查询优化方案,分享给大家。

 

方法1:

优化方法:

1. 查询条件调整,把时间查询单独摘出来用TP5新增的whereTime方法,这个方法的作用是专门针对于时间查询的.(演示1:  要是用下演示代码的话,需单独加一个addtime索引)

2. 接口:分页的查询的地方,可以调整一下limit(0,10)方式,一般是limit起始值是个变量,随着传入的页数进行改变,随着起始值的增大,查询的速度会越来越慢,导致响应的时间也会延长.优化:可以采用where条件进行查询,(演示2 )

举例演示:


(1)$list_day=Db::name('user_coinrecord')
->field("uid,sum(totalcoin) as total")
->where(" action in ('1','2') and touid='{$uid}' ")
->whereTime(“addtime”,”between”,[$today_start,$today_end])
->group("uid")
->order("total desc")
->limit($page_nums)
->select()
->toArray();


(2) 第一步:先查出最大的一条数额


$info=DI()->notorm->user_coinrecord
            ->select('sum(totalcoin) as totalcoin,touid as uid')
               ->where(‘ addtime >={$dayStart} and addtime<={$dayEnd} and type=0 and action in ('1','2')’)
            ->group('touid')
            ->order('totalcoin desc')
            ->fetchOne();
If(!$info){
$info[‘totalcoin’]=’0’;
}

 

第二步:在加到查询条件中


$list=DI()->notorm->user_coinrecord
            ->select('sum(totalcoin) as totalcoin,touid as uid')
               ->where(‘ addtime >={$dayStart} and addtime<={$dayEnd} and type=0 and action in ('1','2')  and totalcoin<={$info['totalcoin']} ’)
            ->group('touid')
            ->order('totalcoin desc')
            ->limit(50)
            ->fetchAll();

 

方法2:

优化方法:

1.优化表字段的长度  

例如:giftid ,giftcount, totalcoin使用的是int类型,长度为20,字节长度有点太长了,占用资源,可以根据使用情况缩短字节或者可以采用 tinyint 类型.

2.根据查询条件创建索引,最多不要超过6个.

3.主播排行榜控制器(Contribute)中 查询条件是touid ,索引中是uid,索引未生效.

4.为使用order by和group by的字段创建索引.

5.升级服务器配置,使用云数据库.

 

方法3: (非必要时,不建议采取)

优化方法: 更改MySQL配置文件my.cnf中的配置, Innodb_buffer_pool_size(默认128M)此函数是配置InnoDB缓存池的大小,用于缓存索引、行的数据、自适应哈希索引、插入缓存(Insert Buffer)、锁 还有其他的内部数据结构,最大值不能超过服务器物理内存的80%;

 配置注意:

1. 设置不合适或过大,会导致浪费资源,影响数据库性能,导致数据库不能正常运行,重启等操作时,响应时间会过长.

2. 合理的计算公式(仅供参考):

Innodb_buffer_pool_size = 系统可用内存  - 系统正常运行内存 - (峰值时的连接数 * 每个连接需要的内存)若算出的值过大,根据实际情况,压低一下

 总结:方法1,2,3 可根据需求和实际情况,逐一配置,也可以一块配置到是不冲突.(仅代表个人想法)

声明:以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com

声明:
以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任