Questions tagged «paging»

2
分页性能,可自定义排序数百万行
在我们的应用程序中,我们有一个网格,用户可以在该网格上翻阅大量记录(10-20百万)。网格支持在多列(20+)中以升序和降序排序。许多值也不是唯一的,因此该应用程序还按ID进行平局,以确保行始终出现在同一页面上。例如,如果用户要按小部件大小排序(从最大的开始),则应用程序将生成一个查询,看起来像这样: SELECT TOP 30 * -- (Pretend that there is a list of columns here) FROM Test -- WHERE widgetSize > 100 ORDER BY widgetSize DESC, id ASC 该查询需要大约15秒的时间来运行(使用缓存的数据),主要的花费似乎是根据widgetSize对130万行进行排序。为了调优该查询,我发现如果我添加一个WHERE仅限于最大的widgetSizes(在上面的查询中注释)的子句,查询仅需约800ms(所有前50,000个结果中的widget大小均大于100) 。 为什么没有WHERE子句的查询这么慢?我检查了widgetSize列上的统计信息,它们显示前739行的WidgetSize>506。由于仅需要30行,因此SQL Server不能使用此信息来推断它仅需要对具有窗口小部件大小的行进行排序哪个大? 我知道我可以通过在上添加索引来使此特定查询的执行更快widgetSize和id,但是该索引仅在此特定情况下有用,并且在(例如)用户反转排序方向时变得毫无用处。该表包含许多其他列,每个索引都很大(〜200mb),因此我真的负担不起为每种可能的排序顺序添加索引。 有什么方法可以使这些查询查询执行而无需为每个可能的排序顺序添加索引?(用户可以按20列以上的任意列进行排序) 以下脚本创建上表,并用一些代表性数据填充该表。该表比实际表要窄得多,但是仍然显示了我所看到的性能。在我的PC上,使用where子句的查询大约需要200毫秒,而没有where停顿的查询大约需要800毫秒。 警告:运行此脚本后生成的数据库大小约为2Gb。 CREATE TABLE Test ( id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, widgetSize INT NOT …

3
SQL Server中的分页
我有一个非常大的数据库,大约100 GB。我正在执行查询: select * from <table_name>; 我只想显示第100至200行。 我想了解内部情况。数据库是否将所有记录从磁盘中提取到内存中,然后将第100至400行发送回查询客户端?还是存在任何机制,以便仅使用B树等索引机制从数据库中提取那些记录(第100个-200个)? 我发现这与分页概念有关,但是我无法确切找到它在数据库级别内部如何发生。

2
基于时间戳的窗口偏移
我正在编写一个查询,该查询将用于分页社交Feed的结果。这个概念是移动应用程序将请求N个项目,并提供一个我在@CutoffTime下面称为的开始日期时间。截止时间的目的是确定何时应启动分页窗口。我们使用时间戳而不是行偏移量的原因是,即使添加了新的社交内容,时间戳也会使我们在获取较旧的帖子时从一致的位置进行分页。 由于社交Feed可以来自您自己或您的朋友,因此我使用UNION来合并这两个组的结果。最初,我尝试了TheQuery_CTE不使用的逻辑UNION,这太慢了。 这是我所做的(包括相关的表架构): CREATE TABLE [Content].[Photo] ( [PhotoId] INT NOT NULL PRIMARY KEY IDENTITY (1, 1), [Key] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), [FullResolutionUrl] NVARCHAR(255) NOT NULL, [Description] NVARCHAR(255) NULL, [Created] DATETIME2(2) NOT NULL DEFAULT SYSUTCDATETIME(), ); CREATE TABLE [Content].[UserPhotoAssociation] ( [PhotoId] INT NOT NULL, [UserId] INT NOT NULL, [ShowInSocialFeed] BIT …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.