繁体   English   中英

varchar(max)列上ORDER BY子句的SQL优化

[英]SQL optimization on ORDER BY clause on varchar(max) column

我们的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版本上运行。

对varchar max使用粗滤波器,例如从这里获取 这实际上是varchar max列的简化版本。 由于您只是用于订购,因此它应该足以满足您的需求。

CREATE SCHEMA [20090501_max]
CREATE TABLE t_bigdata (
id INT NOT NULL PRIMARY KEY,
value NVARCHAR(MAX),
value_index AS CAST(value AS NVARCHAR(450))
)
GO
CREATE INDEX IX_bigdata_value ON [20090501_max].t_bigdata(value_index)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM