gpt4 book ai didi

使用 varchar (max) 的 Sql select 查询花费太多时间

转载 作者:行者123 更新时间:2023-12-03 01:53:07 26 4
gpt4 key购买 nike

我有一个 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(最大值),我会在2秒内得到结果。但我的结果中需要这列 C。

我想让这个查询运行得更快。我只有一个到数据库的只读连接字符串,并且没有修改表的权限。

我尝试按照 stackoverflow 中有人的建议将数据放入分页表中,但这没有帮助。我还尝试限制在 C 列的分页表中收到的字符,但这也不起作用:

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

如何修改此查询以使其运行得更快?这是针对 sql azure server v12 版本运行的正如您在查询中看到的,我想做的是对按 columnA 分区的行进行编号并获取每个类别中的第一行

编辑:添加更多信息:索引仅在 A 列上。该表大约有 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) 上有一个索引。

关于使用 varchar (max) 的 Sql select 查询花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31617389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com