2008-09-25 4 views
1

그래서 열에는이 문자열의 길이를 미리 알 수없는 몇 가지 텍스트가 있습니다. 현실적으로 95 %의 시간은 아마도 100-500 자 사이이지만 10000 자 정도되는 한 사례가있을 수 있습니다. 나는이 문자열의 크기를 제어 할 수 없으며 결코 사용자를 수행하지 않는다. varchar (max) 외에도 다른 전략을 사용하면 유용할까요? 또한 varchar (max)의 몇 가지 단점은 무엇입니까?Sql Server에 지정되지 않은 길이의 문자열을 저장하는 전략은 무엇입니까?

답변

6

sqlserver 2005의 Varchar (최대)는 내가 사용하는 것입니다.

SqlServer는 "text"또는 큰 varchar를 지정했지만 최대가 아닌 큰 문자열 필드를 처리하므로 비트의 일부는 레코드에 저장하고 나머지는 외부에 저장합니다.

내 지식으로는 varchar (max)를 사용하면 전체 내용을 레코드 밖으로 저장하므로 작은 텍스트 입력보다 효율적이지 않습니다. 그러나 "텍스트"필드보다 더 효율적입니다. 부분에서 인라인을 사용하고 나머지는 포인터에서 가져옴으로써 정보를 두 번 볼 필요가 없기 때문입니다.

+0

내가 잘못되었을 수도 있지만 8000 바이트 이상이되면 암시 적으로 데이터를 LOB로 변환 한 다음 실제 데이터 인라인 및 데이터에 대한 포인터를 저장하는 경우에만 행 외부에 저장한다는 인상하에있었습니다. outside – JustinD

1

BLOB 유형을 사용해 보셨습니까?

또한 호기심에서 문자열의 크기를 제어하지 않으며 사용자도 마찬가지입니까?

+0

이것은 파일 – jdelator

1

nvarchar (max)가 확실히 최선의 방법입니다. 행 당 실제 데이터 유형의 최대 값이 아니라 행당 실제로 저장하는 데이터에 필요한 공간 만 할당한다는 것을 알고 계실 것입니다.

지속적으로 행을 업데이트하고 8000 바이트 미만에서 8000 바이트 미만으로 자주 전환하는 경우에만 볼 수 있습니다.이 경우 SQL은 저장소를 LOB로 변경하고 해당 위치에 대한 포인터를 저장합니다. 데이터는 8000 바이트를 넘을 때마다 이 경우에는 앞뒤로 변경하면 비용이 많이 들지만,이 경우에는 볼 수있는 다른 옵션이 없습니다. 그래서 논점 거리에요.

+0

의 메타 데이터입니다.이 열은 결코 업데이트되지 않을 것이라고 언급하는 것을 잊어 버렸습니다. – jdelator

2

하나의 멋지고 효과적인 접근 방법은 테이블에 두 개의 열 (대부분 대다수의 경우를 감당할 수있을만큼 큰 varchar)과 커다란 문제를 저장하는 CLOB/TEXT 유형 중 하나입니다. 삽입/업데이트 할 때 문자열의 크기를 가져 와서 해당 열에 저장할 수 있습니다.

큰 가치가있을 때 깨지 않고 대다수의 경우 varchar의 성능을 제공합니다.

관련 문제