当前位置:Gxlcms > 数据库问题 > 高效的SQLSERVER分页查询

高效的SQLSERVER分页查询

时间:2021-07-01 10:21:17 帮助过:5人阅读

TOP 30 * FROM ARTICLE WHERE ID NOT IN (SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC

第二种方案: 

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> (<span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">30</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> (<span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">45030</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span>) f <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> f.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">ASC</span>, f.ID <span style="color: #0000ff;">DESC</span>) s <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> s.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>,s.ID <span style="color: #0000ff;">DESC</span>

平均查询100次所需时间:138S

第三种方案:

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span><span style="color: #000000;"> ARTICLE w1,
  2. (
  3. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">30</span> ID <span style="color: #0000ff;">FROM</span><span style="color: #000000;">
  4. (
  5. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">50030</span> ID, <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span><span style="color: #000000;">
  6. ) w </span><span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">ASC</span>, w.ID <span style="color: #0000ff;">ASC</span><span style="color: #000000;">
  7. ) w2 </span><span style="color: #0000ff;">WHERE</span> w1.ID <span style="color: #808080;">=</span> w2.ID <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w1.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, w1.ID <span style="color: #0000ff;">DESC</span>

平均查询100次所需时间:21S

第四种方案:

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span><span style="color: #000000;"> ARTICLE w1
  2. </span><span style="color: #0000ff;">WHERE</span> ID <span style="color: #808080;">in</span><span style="color: #000000;">
  3. (
  4. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">top</span> <span style="color: #800000; font-weight: bold;">30</span> ID <span style="color: #0000ff;">FROM</span><span style="color: #000000;">
  5. (
  6. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">top</span> <span style="color: #800000; font-weight: bold;">45030</span> ID, <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span><span style="color: #000000;">
  7. ) w </span><span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">ASC</span>, w.ID <span style="color: #0000ff;">ASC</span><span style="color: #000000;">
  8. )
  9. </span><span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w1.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, w1.ID <span style="color: #0000ff;">DESC</span>

平均查询100次所需时间:20S

第五种方案: 

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> w2.n, w1.<span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> ARTICLE w1, (<span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">50030</span> row_number() <span style="color: #0000ff;">OVER</span> (<span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span>) n, ID <span style="color: #0000ff;">FROM</span> ARTICLE ) w2 <span style="color: #0000ff;">WHERE</span> w1.ID <span style="color: #808080;">=</span> w2.ID <span style="color: #808080;">AND</span> w2.n <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">50000</span> <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w2.n <span style="color: #0000ff;">ASC</span>

平均查询100次所需时间:15S

查询第1000-1030条记录

第一种方案: 

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">30</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">WHERE</span> ID <span style="color: #808080;">NOT</span> <span style="color: #808080;">IN</span>(<span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">1000</span> ID <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span>) <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>,ID <span style="color: #0000ff;">DESC</span>

平均查询100次所需时间:80s

第二种方案:

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> (   <span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">30</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> (<span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">1030</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span>) f <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> f.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">ASC</span>, f.ID <span style="color: #0000ff;">DESC</span>) s <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> s.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>,s.ID <span style="color: #0000ff;">DESC</span>

平均查询100次所需时间:30S

第三种方案: 

代码如下

  1. <span style="color: #0000ff;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span><span style="color: #000000;"> ARTICLE w1,
  2. (
  3. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">30</span> ID <span style="color: #0000ff;">FROM</span><span style="color: #000000;">
  4. (
  5. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">1030</span> ID, <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span><span style="color: #000000;">
  6. ) w </span><span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">ASC</span>, w.ID <span style="color: #0000ff;">ASC</span><span style="color: #000000;">
  7. ) w2 </span><span style="color: #0000ff;">WHERE</span> w1.ID <span style="color: #808080;">=</span> w2.ID <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w1.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, w1.ID <span style="color: #0000ff;">DESC</span>

平均查询100次所需时间:12S

第四种方案: 

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span><span style="color: #000000;"> ARTICLE w1
  2. </span><span style="color: #0000ff;">WHERE</span> ID <span style="color: #808080;">in</span><span style="color: #000000;">
  3. (
  4. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">top</span> <span style="color: #800000; font-weight: bold;">30</span> ID <span style="color: #0000ff;">FROM</span><span style="color: #000000;">
  5. (
  6. </span><span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">top</span> <span style="color: #800000; font-weight: bold;">1030</span> ID, <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">FROM</span> ARTICLE <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span><span style="color: #000000;">
  7. ) w </span><span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">ASC</span>, w.ID <span style="color: #0000ff;">ASC</span><span style="color: #000000;">
  8. )
  9. </span><span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w1.<span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, w1.ID <span style="color: #0000ff;">DESC</span>

平均查询100次所需时间:13S

第五种方案:

代码如下:

  1. <span style="color: #0000ff;">SELECT</span> w2.n, w1.<span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> ARTICLE w1,(<span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">1030</span> row_number() <span style="color: #0000ff;">OVER</span> (<span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span>) n, ID <span style="color: #0000ff;">FROM</span> ARTICLE) w2 <span style="color: #0000ff;">WHERE</span> w1.ID <span style="color: #808080;">=</span> w2.ID <span style="color: #808080;">AND</span> w2.n <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">1000</span> <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> w2.n <span style="color: #0000ff;">ASC</span>

平均查询100次所需时间:14S

     由此可见在查询页数靠前时,效率3>4>5>2>1,页码靠后时5>4>3>1>2,再根据用户习惯,一般用户的检索只看最前面几页,因此选择3 4 5方案均可,若综合考虑方案5是最好的选择,但是要注意SQL2000不支持row_number()函数,由于时间和条件的限制没有做更深入、范围更广的测试,有兴趣的

第六种方案:

代码如下:

  1. <span style="color: #0000ff;">SELECT</span><span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> (<span style="color: #0000ff;">SELECT</span> <span style="color: #0000ff;">TOP</span> <span style="color: #800000; font-weight: bold;">1030</span> row_number() <span style="color: #0000ff;">OVER</span> (<span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> <span style="color: #ff00ff;">YEAR</span> <span style="color: #0000ff;">DESC</span>, ID <span style="color: #0000ff;">DESC</span>) n, <span style="color: #808080;">*</span> <span style="color: #0000ff;">FROM</span> ARTICLE) w2 <span style="color: #0000ff;">WHERE</span> w2.n <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">1000</span>

效率和第五种方案差不多

 

高效的SQLSERVER分页查询

标签:简单   检索   记录   where   sele   数据库   art   row   好的   

人气教程排行