php任何优化的方式下这样第个列表都是再次查询
我们的代码经理是这样的:
计算总行数:select count(*) from tablename where …..
查询列表select * from tablename where … limit…
我们看这种方式再没有任何优化的方式下这样第个列表都是再次查询。
首先我们假设数据更新频率不是很高的情况下,我们点第1页,第2页 。。。第n页 其实第一句sql得到的都是同一个结果,这样是不是后面都在做重复工作呢。那我们第1页得到结果数后是不是可以将结果一下传递下去就行了。
例如我们分页链接第2页是这样的 list.php?page=2&count=126
在程序上加一个判断:
if ($_get['count']) {
$count = $_get['count'];
} else {
$count =select count(*) from tablename where …..
}
这样优化以后如果我们只有第一页才计算总数,后面的页数都不用了,这样是不是就可以提升了效率。
还有这么种情况,也就是在模糊查询的情况下,我们有一个应用,我估计大部分查询结果数小于20,也就是都只有一页结果,那么如果都去计算总数是没有必要的,而且模糊查询效率也比较低。所以我突然想到跳出原来的思维,为什么一定要先计算总行数,再取列表呢?
其实完全可以先查询列表,如果列表结果数=20,那么我们再查询总行数,因为小于20的话,其实只有一页。总行数就等于查出来的列表结果数。
伪代码为:
if ($_get['page']<2) {
$list = select * from tablename where … limit 0,20 第一页时直接查询前20条
if (count($list)=202881064151) {
$count =select count(*) from tablename where …..
} else {
$count =count($list);
}
} else {
$count = $_get['count'];
$list = select * from tablename where … limit page-1*20,page-1*20+20
}
php任何优化的方式下这样第个列表都是再次查询的更多相关文章
- CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)
CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...
- 四、优化及调试--网站优化--Yahoo军规下
21.根据域名划分页面内容 很显然, 是最大限度地实现平行下载 22.尽量减少iframe的个数 考虑即使内容为空,加载也需要时间,会阻止页面加载,没有语意,注意iframe相对于其他DOM元素高出1 ...
- 企业级NginxWeb服务优化实战(下)
企业级NginxWeb服务优化实战(下) 4. Nginx站点目录及文件URL访问控制 4.1 根据扩展名限制程序和文件访问 Web2.0时代,绝大多数网站都是以用户为中心多的,例如:bbs,blog ...
- php cli方式下获取服务器ip
(未整理....) (1)php cli方式下获取服务器ip [php] function getServerIp(){ $ss = exec('/sbin/ifconfig et ...
- 四种数据持久化方式(下) :SQLite3 和 Core Data
在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...
- ORACLE用户管理方式下备份数据和复制数据库
首先要明确的是,oracle数据库的备份可以分为逻辑备份和物理备份. 逻辑备份的是通过数据导出对数据进行备份,主要方式有老式的IMP/EXP和数据泵灯方式.适合变化较少的数据库,而 ...
- php在cli和cgi方式下获取服务器ip的实例
php cli方式下获取服务器ip php内核没有提供这样的命令,需要借助linux中的命令ifconfig来实现,如下两个函数代码: function getServerIp(){ ...
- C# Post方式下,取得其它端传过来的数据
// Post方式下,取得java端传过来的数据 if ("post".Equals(context.Request.HttpMethod.ToLower())) { contex ...
- 【教程】在UEFI启动方式下,通过GRUB2引导,直接从硬盘ISO文件安装Windows10和Ubuntu双系统
本文为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/9949789.html 动机 最近在自学MIT6.828 Operating S ...
随机推荐
- ubuntu 13.10 amd64安装ia32-libs
很多软件只有32位的,有的依赖32位库还挺严重的:从ubuntu 13.10已经废弃了ia32-libs,但可以使用多架构,安装软件或包apt-get install program:i386.有的还 ...
- ubuntu安装vmware tools
1.选择虚拟机菜单栏--安装VMware tools 选择你装虚拟机下的目录,点击 Linux.iso 再重新点击安装VMware Tools 这样会弹出一个包VMwareTools-9.6.0-1 ...
- SRAM的读写操作
自己写的SRAM的程序,主要在于实用性,适应工作的工程需要.使用芯片为: 芯片时序图为: 代码: /********************************Copyright********* ...
- caffe 无GPU 环境搭建
root@k-Lenovo:/home/k# sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-d ...
- Solr学习笔记(一)
最近准备为一个产品做一个站内的搜索引擎,是一个java产品.由于原来做过Lucene.net,所以自然而然的就想到了使用Lucene.在复习Lucene的过程中发现了Solr这个和Lucene绑定在一 ...
- Stringbuffer与Stringbuilder源码学习和对比
>>String/StringBuffer/StringBuilder的异同 (1)相同点观察源码会发现,三个类都是被final修饰的,是不可被继承的.(2)不同点String的对象是不可 ...
- Linux查看硬件配置信息
转自:http://blog.163.com/yang_jianli/blog/static/1619900062010391127338/ 一:查看cpu more /proc/cpuinfo | ...
- 解决Windows和Ubuntu时间不一致的问题
问题原因是使用的时间不一致导致的.win10直接从bios读出来的时间认为就是实际时间,ubuntu认为加上8个小时 后的才是.win10用的rtc ,ubuntu用的utc 在ubuntu16.04 ...
- linux tricks 之 bitmap分析.
------------------------------------------- 本文系作者原创, 欢迎大家转载! 转载请注明出处:netwalker.blog.chinaunix.net -- ...
- thinkphp where()条件查询
今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...