2009-09-03 4 views
3

항상 CHARINDEX을 저장 프로 시저에 사용하여 NVARCHAR(MAX) 변수 유형을 확인했지만 오늘은 CHARINDEX에 8,000 바이트 제한이 있음을 발견했습니다!PATINDEX와 CHARINDEX의 성능은 어떻습니까?

이 기사는 SQL CHARINDEX() Has Data Size Limitations입니다.

그래서 CHARINDEXPATINDEX으로 바꿉니다. 그러나 PATINDEXCHARINDEX 사이의 성능을 알지 못합니다.

+0

나는 SQL Server 2008을 사용하고있다 –

답변

2

CHARINDEX은 찾고있는 문자열의 제한이 8000입니다. 검색하는 문자열이 아닙니다.

> 8000/4000보다 큰 문자열을 찾으려하지 않는 한 그 기사가 잘못되었을 수도 있습니다. 그러나 더 이상 사용되지 않는 텍스트 데이터 유형도 사용합니다. 2007 년으로되어 있기 때문에 그가 사용했던 SQL Server 2005 또는 2000이되지만 SQL Server 2005 BOL은 8000을 전혀 언급하지 않았으며 내가 시도한 것이 아닙니다. SQL 서버 2008 BOL에서

:

CHARINDEX (expression1이 expression2입니다 [ , START_LOCATION])는

하여 expression1이 찾을 수있는 순서를 포함하는 문자 식입니다. expression1은 8000 자로 제한됩니다.

expression2 검색 할 문자 식입니다.

참고 : PATINDEX는 당신이 패턴 일치가 필요하지 않은 경우는 간단한 검색을위한 직관적 인 생각 때문에 내가 CHARINDEX를 사용하는 것,

마지막으로 SQL 2008 또는 2005 8000 한계를 언급하지 않고, 긴 문자열 지원

+0

답장을 보내 주셔서 감사합니다. 매우 긴 문자열 (8000 개 이상)을 처리해야하므로 선택할 수 있습니다. PATINDEX. –

+2

그것은 어떤 기능이 더 빠르는지에 대해서는 아무 것도 말하지 않고 있습니다 ... – gotqn

+0

@gotqn : 다른 일을하고 다르게 행동하는 기능을 비교할 수는 없습니다. PATINDEX는 CHARINDEX가 동등한 패턴 매칭입니다. 그것은'LIKE'와'= ' – gbn

1

데이터 유형이 텍스트 또는 ntext 인 경우 CHARIndex에는 검색중인 문자열에 8000 바이트 (문자가 아님) 제한이 있습니다. 데이터 유형이 varchar (max) 또는 nvarchar (max) 인 경우 8000 바이트 제한이 적용되지 않습니다. 전체 문자열을 검색합니다. (나는 이것으로 조금 컸다.) CAST를 사용하여이 문제를 해결했다. CHARINDEX(searchterm, CAST(columnname as nvarchar(max))

관련 문제