sql-server - SQL 查询使站点崩溃或没有从 SQL 响应以执行查询
问题描述
我的数据库中有 5000 条记录。现在我要一次更新 500 条记录,但是我的网站会因为这个执行而崩溃,而且 SQL 服务器也没有响应。请帮我解决这个问题。
public void UpdateProductStatus(int[] productIds)
{
if (productIds == null || productIds.Count() == 0)
return;
_dbContext.ExecuteSqlCommand(
" DECLARE @TempPIds AS TABLE(Id INT) " +
" INSERT INTO @TempPIds" +
" SELECT * FROM dbo.Split('" + string.Join(",", productIds) + "', ',') OPTION (MAXRECURSION 0) " +
" UPDATE Product SET IndexStatus = 1" +
" FROM Product p INNER JOIN @TempPIds tp ON p.Id = tp.Id WHERE IndexStatus = 0");
}
ALTER FUNCTION [dbo].[Split]
(
@String NVARCHAR(4000),
@Delimiter NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
UNION ALL
SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
FROM Split
WHERE endpos > 0
)
SELECT --'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
FROM Split
)
此查询是正确的,但它会减慢我的网站以及 SQL 服务器的速度。请任何人都可以帮助我加快此查询或更新索引状态的替代方法吗?
解决方案
将 ID 字符串放在不拆分的 IN 子句中可能是错误的因为数字可以包含在数字中,如果 ID 12 更新为 12、1、2。
对于 TVP,您可以转移到临时表,然后您还可以获得性能