【发布时间】:2014-11-27 10:02:19
【问题描述】:
我们的 C# 应用程序使用 SQL 数据库来相互匹配表。我们有一个包含大约 100 万行的表。大多数数据类型是 varchar(900) 及以下。虽然有些列是作为 varchar(max) 类型导入的。用户可以通过 C# 应用程序查看包含 100 万条记录的整个表。为了减少在本地系统上使用的内存量,我们使用分页算法。例如。我们在内存中加载了两个 +- 15.000 行的数据表。当用户滚动过去这些页面时,最远的页面将使用数据库表中的新数据进行更新,这样您就可以拥有非常大的表而不会遇到内存问题。
我们使用行号从数据库表中获取特定数据。检索数据的查询如下所示:
;WITH selectRows AS(SELECT *, row=ROW_NUMBER() OVER(ORDER BY myColumn) FROM myTable)
SELECT * FROM selectRows WHERE row BETWEEN 0 AND 15000;
在小桌子上,这对性能来说不是什么大问题。但是对于大型表,当我们对没有索引的列(例如 varchar(max) 列)进行排序时,它将执行非常慢。正如预期的那样,对具有索引的列进行排序的速度非常快。是否可以在 varchar(max) 列上对大表进行排序。 如果我的问题有任何解决方案,它应该能够在 SQL Server 2005、2008、2012 版本上运行。
【问题讨论】:
标签: sql sql-order-by