thinkphp翻页过慢的解决方案

@Ta 02-18 18:41发布,02-18 18:42修改 1687点击

第一个方法肯定考虑从/thinkphp/library/think/db/Query.php 下手,改为子查询

本次采用的是数据分表法,对于大容量内容翻页慢, 就是limit的问题,比如:limit 150000,10

将主键列复制
对这个表进行分页

	$results = db('content_copy')
    		->order('id')
    		->paginate(15,false,[
                'query'=>request()->param()
            ]);

取出数据id

$view_id = implode(',',array_column($results->items(), 'id'));

查询内容

$results2 = db('content')
    		->where('id','in',$view_id)
    		->select();

回写

$results->setitems($results2);

setitems需要在thinkphp/library/think/Paginator.php
增加

public function setitems($items)
    {
        return $this->items = Collection::make($items);
    }

当然了方法很多,这个方法也不算多好,想省事还得做触发器,而且还有搜索分页方面的问题,如果手撸一个分页函数似乎也是不错的选择

回复列表(3|隐藏机器人聊天)
  • @Ta / 02-19 03:13 / /
    每次都需要复制主键列吗
    我有一个主表大概有几百万条数据。
    关联查询的表有九个。
    也是遇到翻页有点慢。感觉也没有什么好的解决办法。
  • @Ta / 02-19 09:10 / /
    遇到过。没试过怎么解决!
  • @Ta / 02-19 10:10 / /

    @淡然,关联的多,需要更复杂的处理逻辑,二次查询等等,我这个属于最简单的,只是不想破坏tp的其他业务逻辑才做简单修改,新建表复制主键列,原表做触发器关联新表即可,增减内容自动操作

添加新回复
回复需要登录