偏移offset查询优化

偏移offset查询优化

最近CTO说要优化一下关于offset的查询效率,情况是这样的,有一张10万多条数据的表,原本的查询方式是这样的:

<?php

$offset=0;
$limit=100;

while(true){
	// 这里就是模拟一下偏移量查询
	$dataBaseData=$model->offset($offset)->limit($limit);
	if(!$dataBaseData){
		break;
	}
	$offset+=$limit;
}

这样的查询有一个很大的问题,那就是在查询9900-10000这样的数据时,也是遍历整张表的,查询效率非常低,所以优化的核心思路也非常简单,就是使用索引,而一般的索引就是id,修改后的查询条件如下:

$offsetId=0;
$limit=100;

while(true){
	$dataBaseData=$model->where("id > {$offsetId}")->order("id asc")->limit($limit);
	if(!$dataBaseData){
		break;
	}
	// 更新判断条件,从下一个id开始
	$offsetId=end($dataBaseData)['id'];
}

其实核心思路很简单,就是将原先的偏移量修改为where,这样就可以走索引那一层,比起原先全表遍历的速度更快。

发布了184 篇原创文章 · 获赞 72 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/YQXLLWY/article/details/90274319