当前位置:数据库 > SYBASE >>

sybase分页查询优化支持排序

是不支持排序的,这次又写了一个支持排序的,不过要在数据库排序列加上索引,并在程序中指定索引名字。(注:sybase的jdbc API不是很智能不指定就没用使用索引搞的速度很慢)

带排序分页代码下载

测试代码如下:

[java]
<P> /**
  * @param args
  * @throws InterruptedException 
  */ 
 public static void main(String[] args) throws InterruptedException { 
  StringBuilder sql = new StringBuilder("select t.keyId,t.pvcode" + 
    ",t.spType,t.factory,t.spareType,t.spareNum," + 
    "t.spareFuncNum,t.spareState,t.spareSerialNum,t.spareHardVersion,t.spareSoftVersion," + 
    "t.spareEnName,t.spareZhName,t.spareAddress " + 
    " from province_Spare_Info_ALL t where 1=1 order by factory");//  
  PagingService service = new PagingService(); 
  int pageSize = 15; 
  int startNum = pageSize * 0;//第一页  
  //首次加载效率  
  long b = System.currentTimeMillis(); 
  getPage(service ,sql.toString(),startNum,pageSize); 
  long e = System.currentTimeMillis(); 
  System.out.println("首次加载时间"+(e-b)); 
  Thread.currentThread().sleep(10000);//缓存5.5秒后可查询 我得电脑是4.7秒  
  //缓存之后效率  
  startNum = pageSize * 8000;//第8000页  
  b = System.currentTimeMillis(); 
  getPage(service ,sql.toString(),startNum,pageSize); 
   e = System.currentTimeMillis(); 
  System.out.println("翻到第8000时间"+(e-b)); 
  </P><P>  startNum = pageSize * 40000;//第40000页  
  b = System.currentTimeMillis(); 
  getPage(service ,sql.toString(),startNum,pageSize); 
   e = System.currentTimeMillis(); 
  System.out.println("翻到第40000时间"+(e-b)); 
 } 
 public static void getPage(PagingService service,String sql, int startNum, int pageSize ){ 
  /*
   * 我这里主键的索引是 province_pk_1
   * factory 字段加的索引名叫province_index_1
   * 如果就一个主键那写null就可以。如果几个索引那用哪个索引写哪个索引的名字
   */ 
  Page page = service.findPageBySql(sql, ProvinceSpareInfoAll.class, "keyId", startNum, pageSize,"province_index_1");//province_pk_1  
  List list = page.getData(); 
  System.out.println(page.getTotalCount()); 
  for (Object object : list) { 
   ProvinceSpareInfoAll p = (ProvinceSpareInfoAll)object; 
   System.out.print(p.getKeyId()+" "); 
  } 
  System.out.println(); 
 }</P> 

 /**
  * @param args
  * @throws InterruptedException
  */
 public static void main(String[] args) throws InterruptedException {
  StringBuilder sql = new StringBuilder("select t.keyId,t.pvcode" +
    ",t.spType,t.factory,t.spareType,t.spareNum," +
    "t.spareFuncNum,t.spareState,t.spareSerialNum,t.spareHardVersion,t.spareSoftVersion," +
    "t.spareEnName,t.spareZhName,t.spareAddress " +
    " from province_Spare_Info_ALL t where 1=1 order by factory");//
  PagingService service = new PagingService();
  int pageSize = 15;
  int startNum = pageSize * 0;//第一页
  //首次加载效率
  long b = System.currentTimeMillis();
  getPage(service ,sql.toString(),startNum,pageSize);
  long e = System.currentTimeMillis();
  System.out.println("首次加载时间"+(e-b));
  Thread.currentThread().sleep(10000);//缓存5.5秒后可查询 我得电脑是4.7秒
  //缓存之后效率
  startNum = pageSize * 8000;//第8000页
  b = System.currentTimeMillis();
  getPage(service ,sql.toString(),startNum,pageSize);
   e = System.currentTimeMillis();
  System.out.println("翻到第8000时间"+(e-b));
    startNum = pageSize * 40000;//第40000页
  b = System.currentTimeMillis();
  getPage(service ,sql.toString(),startNum,pageSize);
   e = System.currentTimeMillis();
  System.out.println("翻到第40000时间"+(e-b));
 }
 public static void getPage(PagingService service,String sql, int startNum, int pageSize ){
  /*
   * 我这里主键的索引是 province_pk_1
   * factory 字段加的索引名叫province_index_1
   * 如果就一个主键那写null就可以。如果几个索引那用哪个索引写哪个索引的名字
   */
  Page page = service.findPageBySql(sql, ProvinceSpareInfoAll.class, "keyId", startNum, pageSize,"province_index_1");//province_pk_1
  List list = page.getData();
  System.out.println(page.getTotalCount());
  for (Object object : list) {
   ProvinceSpareInfoAll p = (ProvinceSpareInfoAll)object;
   System.out.print(p.getKeyId()+" ");
  }
  System.out.println();
 }

 

补充:软件开发 , Java ,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,