设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 问答求助
›
关于分页的效率问题
1
2
/ 2 页
下一页
返回列表
查看:
7752
|
回复:
15
[讨论/交流]
关于分页的效率问题
[复制链接]
baiyuxiong
baiyuxiong
当前离线
积分
3505
IP卡
狗仔卡
发表于 2010-4-2 19:25:42
|
显示全部楼层
|
阅读模式
使用CI分页,发现总是要先得到
$config['total_rows']
这个参数。要得到这个参数需要查询一次数据库,并计数。在显示的时候,又要用LIMIT来查询一次,我觉得这样完全没有必要,很影响效率,不知道大家怎么看?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
visvoy
visvoy
当前离线
积分
1342
IP卡
狗仔卡
发表于 2010-4-2 22:30:51
|
显示全部楼层
因为要计算总页数,我自己写的分页也得query两次,不知道有高淫有一次query的方法吗?
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50192
IP卡
狗仔卡
发表于 2010-4-2 23:39:54
|
显示全部楼层
除非不计算总页数,或者缓存总数。。。。
回复
支持
反对
使用道具
举报
显身卡
baiyuxiong
baiyuxiong
当前离线
积分
3505
IP卡
狗仔卡
楼主
|
发表于 2010-4-3 05:12:22
|
显示全部楼层
能不能一次查询得到总数,同时把结果也保存起来。显示的时候,根据页面显示结果里的一部分?
回复
支持
反对
使用道具
举报
显身卡
仲夏
仲夏
当前离线
积分
6
IP卡
狗仔卡
发表于 2010-4-3 09:39:34
|
显示全部楼层
我也是查询2次的,一次带LIMIT,得到当前页的结果,一次不带LIMIT并count,得到总数。不过不知为何计算总数的查询总是很慢,而且当检索条件比较复杂后,两次查询的时间加起来就很客观了…现在我打算用数据库缓存来减少计算总数的查询。
回复
支持
反对
使用道具
举报
显身卡
jeongee
jeongee
当前离线
积分
5622
IP卡
狗仔卡
发表于 2010-4-3 10:38:15
|
显示全部楼层
本帖最后由 ywqbestever 于 2010-4-3 10:40 编辑
回复
4#
baiyuxiong
你说的当然是可以的,返回的结果保存在数组里,比如20条记录,下标0-19,一页5条,现在要第二页,那就是输出数组的5-9条即可
但是这样返回的是你所有的记录,数据多了,是不是有点。。。。能比一次select count和一次limit来的好吗?
回复
支持
反对
使用道具
举报
显身卡
scckfzx
scckfzx
当前离线
积分
109
IP卡
狗仔卡
发表于 2010-4-3 11:40:09
|
显示全部楼层
本帖最后由 scckfzx 于 2010-4-3 11:41 编辑
如果你是非常大型的应用的话,将总记录缓存起来,然后隔一段时间更新下总记录,或者不显示总记录
一般的平台这点资源消耗还是无所谓的
CI案例:长途汽车查询:http://qiche.yiqi2.com
天气预报查询:http://tq.yiqi2.com
回复
支持
反对
使用道具
举报
显身卡
baiyuxiong
baiyuxiong
当前离线
积分
3505
IP卡
狗仔卡
楼主
|
发表于 2010-4-4 01:06:23
|
显示全部楼层
回复
6#
ywqbestever
第一次得到总数的时候,不也是要查出来全部的记录统计数量吗?
回复
支持
反对
使用道具
举报
显身卡
上善若水
上善若水
当前离线
积分
231
IP卡
狗仔卡
发表于 2010-4-8 07:45:49
|
显示全部楼层
哦 第一次查总数时,不会查总量 用limit
回复
支持
反对
使用道具
举报
显身卡
zix
zix
当前离线
积分
299
IP卡
狗仔卡
发表于 2010-11-29 11:17:43
|
显示全部楼层
如果用的是mysql有一个办法,就是在查询语句中加个 SQL_CALC_FOUND_ROWS 参数,
如:
1、select SQL_CALC_FOUND_ROWS * from table limit 0 , 15 取得查询的结果
2、select FOUND_ROWS() 获得总行数
SQL_CALC_FOUND_ROWS 会自动屏蔽limit,效率问题就不清楚了,有人说快,有人说慢!
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页