zoukankan      html  css  js  c++  java
  • jquery easy ui 分页

    为了解决大数据量下显示数据的问题,我们需要这样的一个效果:用户每次操作分页工具栏的时候向数据库获取新的数据,服务器根据传递回的参数确定需要获取的数据段,然后查询数据库获取指定若干行的数据,再传递给前台由Datagrid显示出来。

    首先,设置datagrid的初始化

    1. $(function() {  
    2. $('#tableTrainee').datagrid('getPager').pagination({  
    3.                 pageSize: 10, //每页显示的记录条数,默认为10    
    4.                 pageList: [10, 15, 20, 25], //可以设置每页记录条数的列表  
    5.                 onSelectPage: function(pageNumber, pageSize) {  
    6.                 SearchTrainee();//每次更换页面时触发更改   
    7.                }  
    8.             });  
    9.    });  

    其中的SearchTrainee()方法在每次更新页面的时候都会被加载一次。

    其次,获取数据并加载      

    1. function SearchTrainee() {  
    2.            functionSearchTrainee() {  
    3.            var companyCode =$('#hiddenCompanyCode').val();   
    4.            var name = $('#txtName').val();  
    5.            if (companyCode== "") companyCode = "000";  
    6.            var dg =$('#tableTrainee');  
    7.            var opts =dg.datagrid('options');  
    8.            var pager =dg.datagrid('getPager');  
    9.            var _pageNumber =opts.pageNumber;  
    10.            var _pageSize =opts.pageSize;  
    11.            //异步获取数据到javascript对象,入参为查询条件和页码信息  
    12.            $.post('Ajax/GetTraineeHandler.ashx', {  
    13.                Name: name,  
    14.                CompanyCode:companyCode,  
    15.                pageNumber:_pageNumber,  
    16.                pageSize:_pageSize  
    17.            }, function(data) {  
    18.            //注意此处从数据库传来的data数据有记录总行数的total列  
    19.               var total = JSON.parse(data).rows[0].total;  
    20.               $('#tableTrainee').datagrid('loadData', JSON.parse(data));  
    21.               pager.pagination({  
    22.               //更新pagination的导航列表各参数  
    23.               total:total,//总数  
    24.               pageSize: _pageSize,//行数  
    25.               pageNumber: _pageNumber//页数  
    26.                });  
    27.   });  
    28.        }  

    下面的工作就是使用服务器获取数据库的数据了。

    按照以上要求的话,数据库的查询语句就不能使用 count(*),select * 类似需要全局搜索的语句了,因为其太耗时了。

    网上牛人关于分页搜索语句的帖子非常的多,搜索方法多种多样,这里我采用了以下这个:

    1. select top 页大小 * from id   
    2. where id  not in  
    3. (   
    4. select top 页大小*(页数-1) id  from table  order by id  asc  
    5. )    

    这个语句的优点是不用查询所有行,缺点是页码越大,查询的效率越低。例如,一次测试中获取一千万行后的10行数据,约需要1分钟。


    现在的主要问题基本是解决了,但是还是存在不少问题:

    1. 从服务器中获取数据总条数的时候是使用的select count(*)语句,这样的语句和select * 类似,都是需要搜索全部数据的,会导致大数据的情况下变得很慢。

    2. 不止可以从查询语句方面提高查询效率,如果可以的话,应该给数据库表添加索引,如果可以添加存储过程的话就更好了。


    2013.12.30补充

    在查询数据库的时候,也可以采用下面这条语句

    1. SELECT TOP 页大小 *  
    2. FROM table1  
    3. WHERE id >  
    4.           (  
    5.           SELECT ISNULL(MAX(id),0)   
    6.           FROM   
    7.                 (  
    8.                 SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id  
    9.                 ) A  
    10.           )  
    11. ORDER BY id  

    比较下来,这个语句比上面使用not in语句的查询效率更高,但仍无法避免页码增大会导致效率变差的情况,获取1千万行以后的10行数据仍然需要1分钟以上。

    获取datagrid右下角那里的总页数,不可避免的需要使用count语句,这会出现查询语句的短板,无奈~~

    如果不带条件的获取总行数的话,可以使用下面这条语句

    SELECT ROWS FROM SYSINDEXES WHERE ID = OBJECT_ID('tableName') AND INDID = 1

    注意其获取的并非精确值,而是服务器隔一段时间更新的数据库表总行数。

  • 相关阅读:
    Burp Suite Professional单文件精简版该如何使用?
    快速掌握WinDBG
    Baymax大白补丁打油诗
    学员达标后完成的作业
    5星命名法:掌握这个软件全省
    挖掘IDA不可缺少的插件
    JEB安装和使用视频教程系列
    Ollydbg/x32dbg/x64dbg堆栈回溯要点总结
    Ollydbg狩猎从入门到精通
    Ollydbg/x32dbg爆破与逆向八法
  • 原文地址:https://www.cnblogs.com/wahaccp/p/4225419.html
Copyright © 2011-2022 走看看