经过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;
       
       
    }

}
?>

转载于:https://www.cnblogs.com/fengju/archive/2009/04/25/6173890.html

php mssql 分页SQL语句优化 持续影响相关推荐

  1. 优化的ms sql server分页sql语句

    优化的ms sql server分页sql语句 发布时间: 2009-8-15 00:00 |  发布作者: hjh |   |  查看: 3次 特点:一次查询,数据库Databnse只返回一页的数据 ...

  2. 五百万的数据,每次查询一万条,每次到300万左右的数据查询数据就非常慢(sql语句优化对查询的巨大影响)

    前言 在做数据同步,起先还好,但是等到数据测试的时候,发现sql语句对性能影响是非常大的 测试数据库:mysql,id主键 原先 下面的语句都是简化版 select name from ceshi w ...

  3. mysql常用sql语句优化

    转载自:http://www.cnblogs.com/gomysql/p/3632209.html 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要因素.当然还有其他方 ...

  4. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  5. 一个系列搞懂Mysql数据库12:从实践sql语句优化开始

    Table of Contents 字段 索引 查询SQL 引擎 MyISAM InnoDB 0.自己写的海量数据sql优化实践 mysql百万级分页优化 普通分页 优化分页 总结 除非单表数据未来会 ...

  6. Sql语句优化及存储过程

    1. 怎么加快查询速度,优化查询效率,主要原则就是应尽量避免全表扫描,应该考虑在where及order by 涉及的列上建立索引. 2.:一个表的索引不是越多越好,也没有一个具体的数字,根据以往的经验 ...

  7. SQL语句优化(落实到代码,不绕弯子)

    文章目录 看完本篇文章你能学到什么? SQL语句优化 1.1 排序优化 1.1.1 索引优化 1.1.2 算法优化 1.1.3 排序优化建议 1.2 分组优化 1.3 分页优化 1.3.1 分页优化一 ...

  8. 事半功倍的20种SQL语句优化

    事半功倍的20种SQL语句优化 1.使用where条件限定要查询的数据,避免返回多余的行 假设业务场景是查询某个用户是否是会员 优化前: List<Long> userIds = sqlM ...

  9. SQL语句优化技术分析

    SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  10. 看看Entity Framework 4生成的复杂的分页SQL语句

    之前发现Entity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题. >>> 来看一看,瞧一瞧! ...

最新文章

  1. IIS环境下如何批量添加、修改、删除绑定的域名
  2. 人类虐待机器人却遭反杀,这段人造视频在网上爆红,网友:心疼机器人
  3. JavaScript实现图像处理----resizeImageWidth调整图像宽度算法(附完整源码)
  4. MybatisPlus 多租户架构(Multi-tenancy)实现
  5. Android笔记: 解决ScrollView嵌套ListView的冲突方法
  6. spring-boot基础概念与简单应用
  7. 金额输入框校验和自动校正、支持指定任意位数小数decimal、支持只能输入整数、支持是否允许输入负数等功能
  8. fastslam matlab,fastslam 快速定位和构图的源码,一个简单的例子,3D建模,可以用作学习智能机器人自主移动 matlab 272万源代码下载- www.pudn.com...
  9. 关于Promise详解
  10. 粒子滤波简介(转载)
  11. 安装及卸载CrossOver for Mac
  12. MySQL-第十三篇使用ResultSetMetaData分析结果集
  13. 计算机桌面文字重影,电脑桌面字有重影怎么办
  14. 【项目实训】实验八 数据处理
  15. 电脑开始菜单没有了关机选项,怎么办
  16. python如何画散点图
  17. [Hadoop] mac搭建hadoop3.X 伪分布模式
  18. 对图片进行奇异值分解(SVD)
  19. Java事务设计模式
  20. 入门编程指南:如何从零开始学习编程?

热门文章

  1. 从△走进OO,走进策略模式
  2. Java Persistence with MyBatis 3(中文版) 第二章 引导MyBatis
  3. iOS 处理pfx文件
  4. 这些小工具让你的Android开发更高效
  5. activex java 控件_swt java 内嵌ActiveX控件
  6. Shell函数和正则表达式
  7. angularjs ng-include
  8. 【Python】【Flask】前端调用后端方法返回页面
  9. HttpRequest 和HttpWebRequest的区别
  10. parawork平台介绍