>데이터 베이스 >MySQL 튜토리얼 >SQL WHERE IN 절에 대해 쉼표로 구분된 문자열을 효율적으로 구문 분석하는 방법은 무엇입니까?

SQL WHERE IN 절에 대해 쉼표로 구분된 문자열을 효율적으로 구문 분석하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-09 14:09:41758검색

How to Efficiently Parse Comma-Separated Strings for SQL WHERE IN Clauses?

쉼표로 구분된 문자열을 사용하여 SQL WHERE IN 절 최적화

저장 프로시저는 쉼표로 구분된 문자열 매개변수를 받는 경우가 많습니다. WHERE IN 절 내에서 사용하기 위해 이러한 문자열을 효율적으로 변환하는 것은 성능에 매우 중요합니다. 이 문서에서는 이 전환에 대한 모범 사례를 자세히 설명합니다.

사용자 정의 함수(UDF) 활용

강력한 솔루션은 쉼표로 구분된 문자열을 구문 분석하는 UDF를 만드는 것입니다. SQL Server 2005 이상 버전의 고성능 UDF는 f_split이며 아래와 같습니다.

<code class="language-sql">CREATE function [dbo].[f_split]
(
@param nvarchar(max), 
@delimiter char(1)
)
returns @t table (val nvarchar(max), seq int)
as
begin
set @param += @delimiter

;with a as
(
select cast(1 as bigint) f, charindex(@delimiter, @param) t, 1 seq
union all
select t + 1, charindex(@delimiter, @param, t + 1), seq + 1
from a
where charindex(@delimiter, @param, t + 1) > 0
)
insert @t
select substring(@param, f, t - f), seq from a
option (maxrecursion 0)
return
end</code>

쿼리 통합

이 UDF는 IN 절을 사용하여 필터링을 단순화합니다.

<code class="language-sql">SELECT *
FROM yourtable 
WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))</code>

성능 비교: UDF와 XML

STRING_SPLIT(XML 기반 분할)이 대안인 반면, f_split은 특히 대규모 데이터세트에서 지속적으로 뛰어난 성능을 보여줍니다. 벤치마크 테스트를 통해 이러한 이점이 확인되었습니다.

요약

f_split UDF는 WHERE IN 절에서 쉼표로 구분된 문자열을 처리하기 위한 안정적이고 효율적인 방법을 제공합니다. 성능상의 이점으로 인해 권장되는 접근 방식입니다.

위 내용은 SQL WHERE IN 절에 대해 쉼표로 구분된 문자열을 효율적으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.