如果您还想获得结果总数(在分页之前),那么在SQL Server 2000,2005,2008,2012中分页结果的最佳方法(性能明智)是什么?
我一直试图了解如何在SQL中实现自定义分页,例如阅读像这样的文章.
我有以下查询,它完美地工作.但我想用这个实现分页.
SELECT TOP x PostId FROM ( SELECT PostId, MAX (Datemade) as LastDate
from dbForumEntry
group by PostId ) SubQueryAlias
order by LastDate desc
Run Code Online (Sandbox Code Playgroud)
我想要的是什么
我有论坛帖子,有相关条目.我想获得最新添加的条目的帖子,所以我可以选择最近辩论的帖子.
现在,我希望能够获得"最近10到20个活跃的帖子",而不是"前10名".
我试过了什么
我试图将ROW函数实现为文章中的那个,但实际上没有运气.
有什么想法如何实现呢?
我希望在表格中获得第n个到第m个记录,以下2个解决方案中的最佳选择:
解决方案1:
SELECT * FROM Table WHERE ID >= n AND ID <= m
Run Code Online (Sandbox Code Playgroud)
解决方案2:
SELECT * FROM
(SELECT *,
ROW_NUMBER() OVER (ORDER BY ID) AS row
FROM Table
)a
WHERE row >= n AND row <= m
Run Code Online (Sandbox Code Playgroud) 我正在开发一个ASP.Net项目,用于在数据库中显示网站上的信息.我想从新闻表中选择前10项,但跳过第一项,我遇到了一些问题.
<asp:SqlDataSource ID="SqlDataSource1"
runat="server" ProviderName="System.Data.SqlClient"
ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>"
SelectCommand="SELECT top 5 [id],
[itemdate],
[title],
[description],
[photo]
FROM [Announcements] order by itemdate desc">
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止,但我无法在网上找到有关如何跳过记录的任何信息
我试图从远程SQL Server检索大约2000亿行.为了优化这一点,我将查询限制为仅使用索引列作为过滤器,并且仅选择列的子集以使查询看起来像这样:
SELECT ColA, ColB, ColC FROM <Database> WHERE RecordDate BETWEEN '' AND ''
Run Code Online (Sandbox Code Playgroud)
但看起来除非我将查询限制在几个小时的时间窗口,查询在所有情况下都会失败并出现以下错误:
OLE DB provider "SQLNCLI10" for linked server "<>" returned message "Query timeout expired".
Msg 7399, Level 16, State 1, Server M<, Line 1
The OLE DB provider "SQLNCLI10" for linked server "<>" reported an error. Execution terminated by the provider because a resource limit was reached.
Msg 7421, Level 16, State 2, Server <>, Line 1
Cannot fetch the rowset from OLE DB provider "SQLNCLI10" …Run Code Online (Sandbox Code Playgroud) 在研究在C#中实现分页的最佳方法时(使用LINQ),大多数建议都是这样的:
// Execute the query
var query = db.Entity.Where(e => e.Something == something);
// Get the total num records
var total = query.Count();
// Page the results
var paged = query.Skip((pageNum - 1) * pageSize).Take(pageSize);
Run Code Online (Sandbox Code Playgroud)
这似乎是通常建议的策略(简化).
对我来说,我的分页主要目的是提高效率.如果我的表包含120万条记录,其中Something ==某些东西,我不想同时检索所有这些记录.相反,我想分页数据,抓取尽可能少的记录.但是用这种方法,似乎这是一个有争议的问题.
如果我理解正确,第一个语句仍然检索120万条记录,然后根据需要进行分页.
以这种方式分页实际上是否提高了性能?如果每次都要检索120万条记录,那么重点是什么(除了显而易见的UI好处)?
我误解了吗?任何.NET专家都可以给我一个关于LINQ,分页和性能的课程(处理大型数据集时)?
这里的SQL-noobie想要将以下存储过程修改为从指定行开始选择指定行数的行.例如,我想从第10行开始选择5行,即10,11,12,13,14,15.
这是我的SP看起来像atm:
SELECT Posts.Slug, Comments.commentId, Comments.[date], Comments.name, Comments.[text]
FROM Comments
INNER JOIN Posts ON Comments.postId = Posts.Id
WHERE Comments.approved = 0
Run Code Online (Sandbox Code Playgroud)
我不需要按顺序阅读结果,以便重要.
谢谢!
sql ×6
sql-server ×6
pagination ×2
performance ×2
.net ×1
asp.net ×1
c# ×1
join ×1
linq ×1
t-sql ×1