Sql select 使用 varchar (max) 的查询花费太多时间
Sql select query with varchar (max) is taking too much time
我有一个 sql 查询是这样的:
with history as (select columnA,columnB,columnC,ROW_NUMBER() OVER (Partition by columnA ORDER BY columnD desc) as rownum from TableA )
select m.columnA,m.columnB,m.columnC from history as m where m.rownum=1
执行此操作大约需要 5 分钟。
在尝试了不同的东西之后,我发现如果我不包括 columnC,它是一个 nvarchar (max),我会在 2 秒内得到结果。但是我的结果中需要这个 C 列。
我想让这个查询 运行 更快。我只有一个到数据库的只读连接字符串,没有修改 table.
的权限
我尝试按照 Whosebug 中有人的建议将数据放入分页 table 中,但没有帮助。
我还尝试限制我在分页 table 中为 columnC 接收的字符,这也没有用:
Create Table #PagedTable (
columnA nvarchar(255),
columnB nvarchar(255),
columnC nvarchar(1000),
rownum int
);
with history as (select columnA,columnB,columnC,ROW_NUMBER() OVER (Partition by columnA ORDER BY columnD desc) as rownum from TableA )
Insert into
#PagedTable
select m.columnA,m.columnB,m.columnC from history as m where m.rownum=1
Select * from #PagedTable
如何修改此查询以使其 运行 更快?
这是 运行ning 对 sql azure server v12 版本
正如您在查询中看到的那样,我想要做的是对按 columnA 分区的行进行编号并获取每个类别中的第一行
编辑:添加更多信息:
索引仅在列 A 上。 table 有大约 10000 行,结果有 2359 行。
这个版本需要多长时间才能运行?
select h.columna, h.columnb, h.columnc
from (select columna, max(columnd) as maxd
from history h
group by columna
) hh join
history h
on h.columna = hh.columna and h.columnd = hh.maxd;
这假定您在 history(columna, columnd)
上有一个索引。
我有一个 sql 查询是这样的:
with history as (select columnA,columnB,columnC,ROW_NUMBER() OVER (Partition by columnA ORDER BY columnD desc) as rownum from TableA )
select m.columnA,m.columnB,m.columnC from history as m where m.rownum=1
执行此操作大约需要 5 分钟。 在尝试了不同的东西之后,我发现如果我不包括 columnC,它是一个 nvarchar (max),我会在 2 秒内得到结果。但是我的结果中需要这个 C 列。
我想让这个查询 运行 更快。我只有一个到数据库的只读连接字符串,没有修改 table.
的权限我尝试按照 Whosebug 中有人的建议将数据放入分页 table 中,但没有帮助。 我还尝试限制我在分页 table 中为 columnC 接收的字符,这也没有用:
Create Table #PagedTable (
columnA nvarchar(255),
columnB nvarchar(255),
columnC nvarchar(1000),
rownum int
);
with history as (select columnA,columnB,columnC,ROW_NUMBER() OVER (Partition by columnA ORDER BY columnD desc) as rownum from TableA )
Insert into
#PagedTable
select m.columnA,m.columnB,m.columnC from history as m where m.rownum=1
Select * from #PagedTable
如何修改此查询以使其 运行 更快? 这是 运行ning 对 sql azure server v12 版本 正如您在查询中看到的那样,我想要做的是对按 columnA 分区的行进行编号并获取每个类别中的第一行
编辑:添加更多信息: 索引仅在列 A 上。 table 有大约 10000 行,结果有 2359 行。
这个版本需要多长时间才能运行?
select h.columna, h.columnb, h.columnc
from (select columna, max(columnd) as maxd
from history h
group by columna
) hh join
history h
on h.columna = hh.columna and h.columnd = hh.maxd;
这假定您在 history(columna, columnd)
上有一个索引。