日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php超大树形分页,PHP+MySql千万级数据limit分页优化方案

發(fā)布時(shí)間:2025/3/12 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php超大树形分页,PHP+MySql千万级数据limit分页优化方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

PHP+MySql千萬(wàn)級(jí)數(shù)據(jù)limit分頁(yè)優(yōu)化方案

1年前

閱讀 2750

評(píng)論 0

喜歡 0

### 原因

徒弟突然有個(gè)需求,就是他發(fā)現(xiàn)limit分頁(yè),頁(yè)數(shù)越大之后,mysql的消耗越大,查詢時(shí)間越長(zhǎng),當(dāng)突破百萬(wàn)級(jí)數(shù)據(jù)之后,一個(gè)簡(jiǎn)單的翻頁(yè)都需要5-6秒,極其不方便。

### 測(cè)試數(shù)據(jù)庫(kù)結(jié)構(gòu)

```

CREATE TABLE IF NOT EXISTS `video_info` (

`id` int(10) unsigned NOT NULL COMMENT '自增ID',

`channel_id` varchar(30) DEFAULT NULL COMMENT '頻道ID',

) ENGINE=InnoDB AUTO_INCREMENT=4565068 DEFAULT CHARSET=utf8mb4;

ALTER TABLE `video_info`

ADD PRIMARY KEY (`id`),

ADD KEY `channel_id` (`channel_id`);

ALTER TABLE `video_info`

MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',AUTO_INCREMENT=1;

```

上面數(shù)據(jù)庫(kù)隨機(jī)生成700W數(shù)據(jù),進(jìn)行效率測(cè)試。

### ThinkPHP5.1的分頁(yè)代碼:

```php

namespace app\index\controller;

use think\Controller;

class Index extends Controller

{

public function index() {

$page = !empty($_GET['page']) ? $_GET['page'] : 1;

$limit = !empty($_GET['limit']) ? $_GET['limit'] : 10;

$where = [];

$param = '?';

if (!empty($_GET['keys'])) {

$where[] = ['channel_id', 'like', '%'.$_GET['keys'].'%'];

$param .= 'keys='.$_GET['keys'];

}

$total = \think\Db::name('video_info')->where($where)->count();

// 取最后一條記錄做翻頁(yè)條件

$sql = \think\Db::name('video_info')->where($where)->limit((($page-1)*$limit), 1)->field('id')->buildSql();

$list = \think\Db::name('video_info')->where($where)->where('id >= '.$sql.'')->limit($limit)->field('id, channel_id')->select();

$this->assign('page', $page);

$this->assign('limit', $limit);

$this->assign('param', $param);

$this->assign('total', $total);

$this->assign('list', $list);

// 渲染模板輸出

return $this->fetch();

}

}

```

### 原生PHP的分頁(yè)代碼:

```php

//程序運(yùn)行時(shí)間

$starttime = explode(' ',microtime());

# 設(shè)置html頁(yè)面為UTF-8編碼

header("Content-type:text/html;charset=utf-8");

# 使用MySqli連接數(shù)據(jù)庫(kù)

$DB = mysqli_connect('127.0.0.1', 'localhost_db', 'localhost_db', 'localhost_db', 3306);

# 設(shè)置數(shù)據(jù)庫(kù)為UTF-8編碼

mysqli_query($DB, 'set names utf8');

$page = !empty($_GET['page']) ? $_GET['page'] : 1;

$limit = !empty($_GET['limit']) ? $_GET['limit'] : 10;

$where = ' 1=1';

$param = '?';

if (!empty($_GET['keys'])) {

$where .= ' AND channel_id like "%'.$_GET['keys'].'%"';

$param .= 'keys='.$_GET['keys'];

}

$sql = 'SELECT COUNT(*) AS count FROM video_info where'.$where;

# 使用mysqli_query()執(zhí)行SQL語(yǔ)句

$res = mysqli_query($DB, $sql);

# 判斷是否執(zhí)行成功

if ($res == false) {

echo '查詢失敗'; exit;

}

$array= mysqli_fetch_array($res);

$total = $array['count'];

$sql = ' SELECT `id`,`channel_id` FROM `video_info` WHERE '.$where.' AND ( id >= ( SELECT `id` FROM `video_info` WHERE '.$where.' LIMIT '.(($page-1)*$limit).', 1 ) ) LIMIT '.$limit;

$res = mysqli_query($DB, $sql);

# 判斷是否執(zhí)行成功

if ($res == false) {

echo '查詢失敗'; exit;

}

$list= mysqli_fetch_all($res, MYSQLI_ASSOC);

//程序運(yùn)行時(shí)間

$endtime = explode(' ',microtime());

$thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);

$thistime = round($thistime,7);

$title = "本網(wǎng)頁(yè)執(zhí)行耗時(shí):".$thistime." 秒";

?>

test page

搜索

ID渠道ID
<?php echo $v['id'];?><?php echo $v['channel_id'];?>

function getParameter(name) {

var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");

var r = window.location.search.substr(1).match(reg);

if (r!=null) return unescape(r[2]); return null;

}

//init

$(function(){

var totalPage = <?php echo $total/$limit;?>;

var totalRecords = <?php echo $total;?>;

var pageNo = getParameter('page');

if(!pageNo){

pageNo = 1;

}

//生成分頁(yè)

//有些參數(shù)是可選的,比如lang,若不傳有默認(rèn)值

kkpager.generPageHtml({

pno : pageNo,

//總頁(yè)碼

total : totalPage,

//總數(shù)據(jù)條數(shù)

totalRecords : totalRecords,

//鏈接前部

hrefFormer : '/2/index.php',

//鏈接尾部

hrefLatter : '',

getLink : function(n){

return this.hrefFormer + this.hrefLatter +'<?php echo $param;?>'+"&page="+n;

}

/*

,lang: {

firstPageText: '首頁(yè)',

firstPageTipText: '首頁(yè)',

lastPageText: '尾頁(yè)',

lastPageTipText: '尾頁(yè)',

prePageText: '上一頁(yè)',

prePageTipText: '上一頁(yè)',

nextPageText: '下一頁(yè)',

nextPageTipText: '下一頁(yè)',

totalPageBeforeText: '共',

totalPageAfterText: '頁(yè)',

currPageBeforeText: '當(dāng)前第',

currPageAfterText: '頁(yè)',

totalInfoSplitStr: '/',

totalRecordsBeforeText: '共',

totalRecordsAfterText: '條數(shù)據(jù)',

gopageBeforeText: '?轉(zhuǎn)到',

gopageButtonOkText: '確定',

gopageAfterText: '頁(yè)',

buttonTipBeforeText: '第',

buttonTipAfterText: '頁(yè)'

}*/

//,

//mode : 'click',//默認(rèn)值是link,可選link或者click

//click : function(n){

//this.selectPage(n);

// return false;

//}

});

});

```

### 最終效果

在沒(méi)優(yōu)化之前,正常的limit翻頁(yè)到4.5W頁(yè),最后一頁(yè)時(shí),需要耗時(shí)22秒左右,優(yōu)化之后則只需要花費(fèi)1.5秒,提高了17倍左右的查詢速度。

### 原理和缺點(diǎn):

原理很簡(jiǎn)單,就是使用子查詢獲得max(id),然后進(jìn)行當(dāng)前分頁(yè)。

缺點(diǎn)也很明顯,那就是分頁(yè)的關(guān)鍵參數(shù),id值只能為自增主鍵,否則這個(gè)方案用不了。

? 著作權(quán)歸作者所有

總結(jié)

以上是生活随笔為你收集整理的php超大树形分页,PHP+MySql千万级数据limit分页优化方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www亚洲天堂| 国产卡一卡二 | 欧美伦理片网站 | 国产一区二区三区毛片 | 国产色播 | 国产成人无码av在线播放dvd | 香蕉视频A | 精品乱码一区内射人妻无码 | 国产伦子伦对白视频 | 国产又粗又猛又爽免费视频 | 三上悠亚在线一区二区 | 午夜久久久久久 | 国产一区二区三区毛片 | 亚洲午夜精品久久久久久app | 在线观看成人 | 一区精品在线 | 一卡二卡三卡四卡五卡 | 亚洲最大色网站 | 日日日噜噜噜 | 欧美日本在线视频 | 国产伦理自拍 | 日本护士做爰视频 | 久久精品无码一区二区三区免费 | 91超碰在线播放 | 日本一级二级视频 | 男阳茎进女阳道视频大全 | 国产尤物视频在线观看 | 色啦啦视频| a级性生活视频 | 精品人人| 激情婷婷久久 | 亚洲无吗在线观看 | 国产女人高潮毛片 | 一级绝黄| 国产亚洲精品美女久久久久 | 韩国av网 | 一区二区视频在线看 | jizz性欧美17 | 亚洲六月丁香色婷婷综合久久 | 国产精品久久久久久妇女 | 男人的天堂网在线 | 九色免费视频 | 精品欧美一区二区精品少妇 | china国产乱xxxxx绿帽 | 午夜福利视频 | 精品一区二区三区中文字幕 | 国产亚洲小视频 | 天天爱天天爽 | 欧洲久久精品 | 日韩av电影在线播放 | 免费在线看黄色 | 国产妞干网 | 天堂中文字幕在线观看 | 国产女主播喷水视频在线观看 | 女同性做爰全过程 | 国产成人午夜精品 | 91亚洲成人| 亚洲精品中文字幕乱码三区 | 在线观看视频色 | 无码人妻久久一区二区三区蜜桃 | 蜜桃视频黄色 | 欧美精品一区二区三区视频 | 欧美老女人性视频 | 日本japanese极品少妇 | 露脸丨91丨九色露脸 | 欧美色图3p| 麻豆视频免费在线 | 成年人在线视频观看 | 波多野结衣先锋影音 | 91调教视频 | 久久综合久久鬼 | 国产主播啪啪 | 天堂av影院 | 中文字幕成人一区 | 夜夜嗨老熟女av一区二区三区 | 久久久影院| 亚洲手机视频 | 在线观看污网站 | 91精彩视频在线观看 | 亚洲一级在线 | 波多野结衣中文字幕在线 | 精品综合久久 | 亚洲一区二区三区四区不卡 | 日韩三级视频 | 国产馆在线观看 | 丝袜人妻一区 | 欧美挤奶吃奶水xxxxx | 糖心av| 三级网站视频 | 男女视频在线免费观看 | 99在线视频观看 | 亚洲性xx | 91视频高清 | 欧美乱码精品一区二区 | 国产精品久久久无码一区 | 成人免费看av | 羞羞的软件 | 日本成人福利视频 | 激情网站在线观看 |