IDのリストを一度に保存しようとしているコードを引き継いでいますが、実行しようとしているアクションに対してこのコードの実行速度が非常に遅いことがわかりました。さらに、特定の場合には、大量のIDが原因でデッドロックが発生します。
USE [store]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UpdateImagePriority]
@separator CHAR(1),
@filename varchar(50),
@parentId int,
@slaveIds varchar(8000)
AS
BEGIN
SET NOCOUNT ON
DECLARE @SLAPriorityint
DECLARE @separator_position INT
DECLARE @array_value VARCHAR(50)
SET @slaveIds = @slaveIds + @separator
SET @SLAPriority= 0
WHILE PATINDEX('%' + @separator + '%', @slaveIds ) <> 0
BEGIN
SET @SLAPriority= @SLAPriority+ 1
SELECT @separator_position = PATINDEX('%' + @separator + '%',@slaveIds )
SELECT @array_value = LEFT(@slaveIds , @separator_position - 1)
SELECT Array_Value = @array_value
SELECT @slaveIds = STUFF(@slaveIds , 1, @separator_position, '')
UPDATE image_info
SET SLA_PRIORITY = @SLAPriority
WHERE FILE=@filename and EXT_PAR_ID=@parentId and SLA_ID=@array_value
END
SET NOCOUNT OFF
END
これは、渡すもののサンプルです。
例えば
separator = ','
filename = 'burgerking'
parentId = '1859'
slaveIds = '15,16,19,20,21,25,28,29,30,38,99'
このコードの速度を向上させる方法に関する提案。
前もって感謝します!