[SQL] 는 SQL Server 쿼리에 대한 최대 크기? IN 절? 더 나은 접근 방법이 있나요 [중복]
SQL는 SQL Server 쿼리에 대한 최대 크기? IN 절? 더 나은 접근 방법이 있나요 [중복]
는 SQL Server 쿼리의 최대 크기는 얼마입니까? (문자 수)
IN 절에 대한 최대 크기? 나는 오라클은 1000 항목 제한을 가지고 있지만 함께 2 인을 AND 연산과이 주위에 얻을 수에 대해 뭔가를 본 것 같아요. SQL Server의 유사한 문제?
최신 정보 나는 그것이 IN 절 1000 개의 GUID의 목록을 제출인가?은 SQL Server에 대해 '다른 시스템 1000 개의 GUID (비 관계형 데이터베이스) 말을 취하고는 "코드에 가입해야 할 경우 어떤 일이 가장 좋은 방법이 될 것입니다? 또는 더 효율적으로 작동하는 또 다른 방법이있다?
나는이 시험하지 않았다 그러나 나는가 XML 문서로 GUID를 제출 할 수 있을까. 예를 들면
<guids>
<guid>809674df-1c22-46eb-bf9a-33dc78beb44a</guid>
<guid>257f537f-9c6b-4f14-a90c-ee613b4287f3</guid>
</guids>
다음 XQuery에 어떤 종류의 문서와 표에 가입 할. 이하 1,000 항목 IN 절보다 효율적인가요?
해결법
-
==============================
1.65,536 * 네트워크 패킷 크기 : 모든 SQL 배치는 배치 크기 제한에 맞게 있습니다.
65,536 * 네트워크 패킷 크기 : 모든 SQL 배치는 배치 크기 제한에 맞게 있습니다.
그 외에는, 쿼리 런타임 조건에 의해 제한됩니다. X IN (A, B, C)은 아무것도 없지만 때문에 일반적으로 스택 크기가 부족합니다 X = A 또는 X = B 또는 X = 비슷한 식 트리를 생성 C에 X = A 또는 (X = B 또는 (X = c)는), 그래서 그것은 또는 많은 수의 매우 깊은 가져옵니다. 꽤 깊은 갈 수 있도록 SQL 7은 IN에서 10K에 대한 값에 SO 충돌,하지만 nowdays 스택은 훨씬 더 깊은 (때문에 64의)입니다.
최신 정보
이미 SQL 서버 목록 / 배열을 전달하는 주제에 ERLAND의 기사를 발견했다. SQL 2008로 당신은 또한 당신이 하나의 테이블 형식 매개 변수로 전체의 DataTable을 전달할 수 있으며 조인 테이블 반환 매개 변수가 있습니다.
XML 및 XPath는 또 다른 가능한 솔루션입니다 :
SELECT ... FROM Table JOIN ( SELECT x.value(N'.',N'uniqueidentifier') as guid FROM @values.nodes(N'/guids/guid') t(x)) as guids ON Table.guid = guids.guid;
-
==============================
2.은 SQL Server 최대 값은 (이 2008 년 버전) 공개 http://msdn.microsoft.com/en-us/library/ms143432.aspx된다
은 SQL Server 최대 값은 (이 2008 년 버전) 공개 http://msdn.microsoft.com/en-us/library/ms143432.aspx된다
는 SQL 쿼리는 VARCHAR (최대)이 될 수 있지만 65,536 * 네트워크 패킷 크기로 제한으로 표시되어 있지만, 그렇다하더라도 당신을 여행 할 가능성이 높습니다 어떤 쿼리 당 2,100 매개 변수입니다. SQL이 절에서의 리터럴 값을 매개 변수화 선택하면, 당신이 먼저 한도에 도달 할 것이라고 생각하지만의 havn't는 그것을 테스트했습니다.
편집 : 그것은 살아 심지어 강제 매개 변수화에 따라 시험이, - 나는 빠른 테스트를 노크하고 IN 절 내에서 30K 항목 실행했다. (2005 SQL 서버)
100,000 항목에서, 그 다음 약간의 시간이 걸렸로 떨어졌다 :
그래서 30K는 가능하지만, 당신이 그것을 할 수해서 - 당신이해야 의미하지 않는다 :)
편집 : 추가 질문으로 인해 계속.
50K는 작동했지만 60K는 BTW 내 테스트 장비에 그렇게 어딘가에서 밖으로 떨어졌다.
절에 큰를 사용하지 않고 값의 조인을 수행하는 방법의 측면에서, 개인적으로 나는에게 최고의 기회를주고, 그 임시 테이블, 색인에 그것을 값을 삽입하고 조인에서 사용, 임시 테이블을 만들 것 optimse 조인. (1000 GUID를 정확히 너무 유용한 통계를 찾을 수 없습니다 있지만, 일반적으로 옵티마이 도움이 될 것입니다 그것에 대한 통계를 생성 할 임시 테이블에 인덱스를 생성.)
-
==============================
3.배치 당, 256메가바이트 있도록 4K 65,536 * 네트워크 패킷 크기 인
배치 당, 256메가바이트 있도록 4K 65,536 * 네트워크 패킷 크기 인
그러나, 인디애나는 그 전에 길을 중지하지만 정확한 아니다.
당신은 메모리 오류와 끝까지하지만 정확한 오류를 불러올 수 없습니다. 거대한 IN 비효율적 어쨌든 될 것입니다.
편집 : 레무스가 생각 나게 : 오류가 "스택 크기"에 관한 것입니다
-
==============================
4.당신이 처음 테이블에 GUID를로드 할 수 있습니다 후 않는
당신이 처음 테이블에 GUID를로드 할 수 있습니다 후 않는
... WHERE var IN SELECT guid FROM #scratchtable
from https://stackoverflow.com/questions/1869753/maximum-size-for-a-sql-server-query-in-clause-is-there-a-better-approach by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에서 일괄 삽입 작업을 수행하는 방법 (0) | 2020.03.15 |
---|---|
[SQL] 무한 행 오프셋 MYSQL (0) | 2020.03.15 |
[SQL] MySQL의에서 숫자의 범위를 생성 (0) | 2020.03.15 |
[SQL] 다중으로 선택하기 WHERE 동일한 열에 조건 (0) | 2020.03.15 |
[SQL] SQL 서버 : 그것은 동시에 두 테이블에 삽입 할 수 있습니까? (0) | 2020.03.15 |