首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SQL中高效地返回多条记录?

如何在SQL中高效地返回多条记录?
EN

Stack Overflow用户
提问于 2010-09-06 12:03:53
回答 2查看 979关注 0票数 1

我正在Windows Server 2008 Enterprise上使用SQL Server 2008 Enterprise。我使用以下代码为查询返回部分数据,以便在我的web应用程序上实现分页(即向上/向下分页以在每页显示部分结果,就像谷歌搜索结果分页一样)(我使用pageCount作为每页上显示的结果数,使用startPos作为结果的起始号)。例如,pageCount 10表示每页显示10个结果,startPos =0表示第一页,startPos =1表示第二页,依此类推。

我的问题是如何在我的场景中有效地获得结果总数?我主要关心的是如何实现分页(即只触摸结果的一部分),同时检索结果的总数?

代码语言:javascript
运行
复制
SELECT *
 FROM   (SELECT
    t.foo, t.goo, ROW_NUMBER() OVER (order by t.zoo DESC ) AS rowNum
   FROM
    dbo.mycorp  t

   WHERE
    (t.foo LIKE '%'+@search+'%'
    or t.foo  LIKE '%'+@search+'%'
    )
    ) tt
    WHERE  tt.rowNum between @startPos and  @pageCount + @startPos-1

先谢谢你,乔治

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-06 12:10:29

这意味着有一个冗余的列,每一行都有相同的值:

代码语言:javascript
运行
复制
WITH cte AS (
    SELECT t.foo, 
           t.goo, 
           ROW_NUMBER() OVER (ORDER BY t.zoo DESC ) AS rowNum,
           (SELECT COUNT(*)
              FROM dbo.mycorp
             WHERE t.foo LIKE '%'+@search+'%'
                OR t.foo  LIKE '%'+@search+'%') AS total_count
      FROM dbo.mycorp  t
     WHERE t.foo LIKE '%'+@search+'%'
        OR t.foo  LIKE '%'+@search+'%')
SELECT c.foo,
       c.goo,
       c.total_count
  FROM cte c
 WHERE c.rowNum BETWEEN @startPos 
                    AND @pageCount + @startPos-1

搜索文本的一种更有效的方法是使用SQL Server's Full Text Search (FTS) functionality

票数 3
EN

Stack Overflow用户

发布于 2010-09-06 12:45:56

如果您的数据访问技术支持多个记录集,我会考虑使用它(我知道ADO.NET确实支持它)。

在查询后包括以下内容

代码语言:javascript
运行
复制
SELECT COUNT(*) AS TotalRecordCount
 FROM   dbo.mycorp  t 
   WHERE 
    (t.foo LIKE '%'+@search+'%' 
    or t.foo  LIKE '%'+@search+'%' 
    ) 
    ) tt

在数据访问层中,您需要在处理搜索结果后切换到下一个记录集,以便检索总计数。使用ADO.NET时,这需要调用dataReader.NextResult()。

最重要的事情是衡量性能。我发现在某些情况下,使用单独的select语句而不是子查询可以带来更快的性能,因为查询优化器能够更好地优化查询。无论哪种方式,您都需要在搜索列上建立适当的索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3648936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档