php mssql 分页SQL语句优化 持续影响
2015-01-24信息快讯网
经过SQL优化后的分面查询速度能够得到大幅提高。
<?php /** * @Filename :page.sql.class.php * @CreatTime :2009-01-06 * @Descrition :此类为SQL语句处理类。 * @UpdateTime-1 :null * @Version :jswweb1.0.0 * @Author :fkedwgwy * @Dome : $sql//SQL语句 $allcount//总记录数 $pagesize//页面显示记录条数 $page//当前页 $sqlc= new sqlpage($sql,$allcount,$pagesize,$page); $sql=$sqlc->getsql(); 优化后的语句: SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 270 Lsh,Ztm,Dyzrsm,Dyzzfs,Cbsm,Cbny,Ssh,Fbsl,jcsl from ts_gcb where Ssh like 'C%' order by Lsh asc) AS inner_tbl ORDER BY Lsh DESC) AS outer_tbl ORDER BY Lsh asc */ class sqlpage{ function sqlpage($sql,$allcount,$pagesize,$page){ $this->sql= $sql;//查询语名 $this->allcount= intval($allcount);//总记录数 $this->pagesize= intval($pagesize);//页面大小(显示记录数) $this->page= intval($page);//当前页 $this->getpage(); $this->gettop(); } function getpage(){ //获取当前页 $this->allpage=ceil( $this->allcount/$this->pagesize);//去当前小数的最大整数 if ($this->page=="" or $this->page>$this->allpage or $this->page<0 or $this->page==0){ $this->page2=1; }else{ $this->page2=intval($this->page);//将页码转换为数字 } } function gettop(){ //获取子查询2的TOP大小 if ($this->page2<$this->allpage){ $this->top2=$this->pagesize; }else{ $this->top2=$this->allcount-$this->pagesize*($this->allpage-1); } } /* function getsql(){//获取SQL语句 $this->s=preg_replace("/select/i","",$this->sql); $this->top1=$this->pagesize*$this->page2; $this->sql1="SELECT TOP $this->top1 $this->s"; if (strpos($this->sql,"asc")){//升序 $this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order DESC ) as bSysTable ORDER BY $this->order ASC"; }else //$this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order DESC ) as bSysTable ORDER BY $this->order ASC"; if (strpos($this->sql,"desc")){//降序 $this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order asc ) as bSysTable ORDER BY $this->order desc"; }else{//不处理排序的情况 $this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order DESC ) as bSysTable ORDER BY $this->order ASC"; } // echo $this->sql_e; return $this->sql_e; }*/ function getsql() { $sql=$this->sql; $this->top1=$this->pagesize*$this->page2; $orderby = stristr($sql, 'ORDER BY'); if ($orderby !== false) { $sort = (stripos($orderby, ' desc') !== false) ? 'desc' : 'asc'; $order = str_ireplace('ORDER BY', '', $orderby); $order = trim(preg_replace('/\bASC\b|\bDESC\b/i', '', $order)); } $sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($this->top1) . ' ', $sql); $sql = 'SELECT * FROM (SELECT TOP ' . $this->top2 . ' * FROM (' . $sql . ') AS inner_tbl'; if ($orderby !== false) { $sql .= ' ORDER BY ' . $order . ' '; $sql .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC'; } $sql .= ') AS outer_tbl'; if ($orderby !== false) { $sql .= ' ORDER BY ' . $order . ' ' . $sort; } echo $sql; return $sql; } } ?>
PHP访问MYSQL数据库封装类(附函数说明)
Mysql数据库操作类( 1127版,提供源码下载 )
PHP程序员最常犯的11个MySQL错误小结
《PHP编程最快明白》第六讲:Mysql数据库操作
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
php empty,isset,is_null判断比较(差异与异同)
发款php蜘蛛统计插件只要有mysql就可用
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
php中去除所有js,html,css代码
PHP isset()与empty()的使用区别详解
phpmyadmin里面导入sql语句格式的大量数据的方法
用sql命令修改数据表中的一个字段为非空(not null)的语句
php for 循环语句使用方法详细说明
PHP+MySQL 手工注入语句大全 推荐
php 攻击方法之谈php+mysql注射语句构造
PHP 批量删除 sql语句
PHP mb_convert_encoding 获取字符串编码类型实现代码
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
PHP 中执行排序与 MySQL 中排序
php SQL之where语句生成器
php adodb操作mysql数据库
php session应用实例 登录验证
php session处理的定制
php session 检测和注销
php session 预定义数组
php执行sql语句的写法
php mssql 数据库分页SQL语句
PHP中for循环语句的几种变型
MySQL中create table语句的基本语法是