zoukankan      html  css  js  c++  java
  • 对查询数据库中第M到N条记录的思考1

          呵呵,以前听庄明学长说过查询数据库中第M到N条记录的好多种方法,自己为是那样,但是从来没有实践过,今天学到Sql server 2005 的查询语句了,于是就想来实践实践自己的想法!

          首先我要声明一下,我在后文中写到的查询前提是表中已经有一个自动增长的字段了.主要是利用它完成查询的.如果要被查询的表中没有这个字段我们可以想办法去构建这个字段,呵呵,这只是我的一个想法,具体做法我还将进一步研究!

         请大家先看看我的这长表:

        create table test1

      (

            _id int identity primary key,

           num  int,

            strnum varchar(10),

      )

       然后我向这张表中插入了55000条记录.

       现在我要查询它里面的第20到第40条记录:

       在网上找发好多资料,也在群里问了好多朋友:

       大致找到了以下几种法:

      法一: select top 20 * from test1 where _id not in(select top 20 _id from test1) --这条语句也挺简单的,但其中使用了 not 关键字,一般情况是不使用的,因为它会降低数据库检索速度!

     法二:

      select * from
    (
     select top 21 * from
      (select top 40 * from test1 order by _id ) t
      order by _id desc
    )   t order by _id

    这个方法是我比较汇满意的方法,因为它没有使用 not 关键字,也没有使用临时表(它会产生数据库锁定,从而降低效率).

     

    法三:

     select top  20*  from
    (
       select top 55900 * from test1 order by _id desc
    ) t order by _id

    这个法其它与法二是一模一样的,只是它是倒查的,原理是一样的.数据库中总记录是55920条记录.我想用上面那种方法不用去考虑总记录数

    法四:

    select top 40 *  into tempTabel from  test1 order by _id

    select top 20 * into myTemp from tempTabel order by _id  desc

    select  * from myTemp order by _id asc

    drop table tempTabel

    drop table myTemp

    这个方法使用了临时表,在中小型网站中使用还可以,但大访问量的网站中,我想是不合适的.

      终上所述,本人建议还是使用第二种方法. 同时希望与大家一起研究没有 _id 这个字段的表中查询第M到N条记录.....

     谢谢大家!!!

     

     


          

     

  • 相关阅读:
    设计模式系列
    Python3 系列之 可变参数和关键字参数
    设计模式系列
    【HANA系列】SAP HANA ODBC error due to mismatch of version
    【FICO系列】SAP FICO FS00修改科目为未清项目管理
    【FIORI系列】SAP OpenUI5 (SAPUI5) js框架简单介绍
    【HANA系列】SAP HANA SQL获取当前日期加若干天后的日期
    【HANA系列】SAP HANA SQL获取本周的周一
    【HANA系列】SAP HANA SQL获取当前日期
    【HANA系列】SAP HANA SQL获取当前日期最后一天
  • 原文地址:https://www.cnblogs.com/wantingqiang/p/1298380.html
Copyright © 2011-2022 走看看