2012-02-22 4 views
-1

데이터베이스에 C#/VB.Net에서 사용되는 클래스를 나타내는 XML 필드가 있습니다. 문제는 초기 조작 후 대부분이 조작이지만 SQL Server에서 수행됩니다. 즉, XML 필드가 즉시 변환됩니다.SQL Server에서 XML을 더 빠르게 만들기 - 테이블로 변환 하시겠습니까?

필드와 레코드가 늘어남에 따라이 작업이 느려지고 있습니다. 느린 것은 모든 필드를 다른 데이터 유형으로 변환하는 것입니다.

그래서 몇 가지 방법의 생각을 속도를 :

는 XML 데이터의 다른 조각을 나타내는 테이블 세트 되세요. 필자는 Insert/Update에서 변경 사항을 거부하는 트리거를 사용하여이 테이블을 읽기 전용으로 만들 것입니다. XML을 업데이트 할 때 XML이 포함 된 내 '기본'테이블은 트리거를 해제하고 새 값으로 테이블을 업데이트 한 다음 트리거를 다시 켭니다.

우리가 XML을 사용하는 유일한 이유는 C#/VB.Net의 클래스로 변환하기가 정말 쉽기 때문입니다. 그러나 나는 모든 비트와 조각을 가져다가 그것을 클래스와 함수로 변환하는 루틴을 작성하게 될 지점을 얻는다. (클래스 -> 테이블).

아무에게도 더 좋은 방법으로 아이디어를 줄 수 있습니까? 나는 XML 구조를 사용하는 아이디어에 묶여 있지 않다. SQL 처리 속도를 높이기 위해 별도의 테이블이 있고 누군가가 테이블의 필드 값을 변경하여 XML이 업데이트되었는지 확인해야하는 것이 염려됩니다. 또는 사용자가 업데이트하도록 허용하지 마십시오.

TIA - Jeff.

+2

C# 클래스를 나타내는 것은 관계형 테이블 대신 XML을 사용하는 특별한 이유가 아닙니다. –

+0

sql에서 클래스 표현을 조작하는 경우 더 이상 신뢰할 수있는 표현이 아니므로 완전한 공간 낭비입니다. 어지럽히 지 말고, 잘못 생각한 것, xml을 버리고 클래스가 테이블 데이터에서 스스로로드되도록하십시오. –

답변

0

저장할 개체의 목적은 무엇입니까? 끈기가 아닌 다른 것이 있다면, 당신은 어떤 호의도하지 않고 있으며, 당신은 적절하게 우려를 나누지 않습니다. 상태가 지속되면 최소한 속성 및 필드에서 열을 만듭니다 (재구성 할 때 내부 메서드를 사용하여 값을 설정하는 경우에만 포함될 수 있음).

0

당신이하고있는 일의 지혜를 무시하고 XML 색인을 만들 수 있습니다. http://msdn.microsoft.com/en-us/library/ms345121%28v=sql.90%29.aspx

기본적인 아이디어는 올바른 색인이 XML을 '사전 분쇄 (pre-shred)'하고 '수동으로'수행하려는 테이블을 자동으로 구축 할 수 있다는 것입니다. 단점은 XML을 많이 저장하는 경우 저장소 요구 사항이 실제로 폭발 할 수 있다는 것입니다.

+0

대신 테이블로 변환해야 할 것 같습니다. – user1226859

+0

실제 문제는 XML 테이블을 'unxml'해야하는 레코드를 가져 오는 것입니다. 거기에는 우리가 빈번히 필요로하는 많은 것들이있어서 우리는 그것을 변환하는 많은 시간을 보냅니다. 나는 내가 항상 잃어버린 곳을 추측하고있다. – user1226859

+0

XML 색인은 XML 컬럼을 사전 unxml 할 수 있습니다. 제가 링크 한 기사는 그것을 아주 잘 설명합니다. 뷰를 통해 XML을 얻는다면 SQL 엔진을 능가하고 상황을 악화시킬 수 있습니까? – Andrew

관련 문제