0

이 질문은 이론적으로 실용적입니다. 쿼리 최적화에 유용한 리소스를 나타내는 모든 결과가 인정 될 것입니다.SQL/XML을 사용하여 데이터베이스에 대한 쿼리 최적화. 추천 자료?

SQLXML 필드에 저장된 많은 양의 데이터를 저장하는 대형 SQL 데이터베이스가 있습니다. XML을 직접 쿼리하는 것만으로는 충분하지 않습니다.

SQLXML (즉, http://msdn.microsoft.com/en-us/library/aa902661(SQL.80).aspx)을 최적화하는 데 관한 MSDN 기사를 살펴본 결과 검색 가능한 XML 필드를 인덱싱하면 검색 속도가 빨라진다는 것을 알고 있습니다.

누구나이 환경 또는 일반적으로 특히 유용한 데이터베이스 최적화를위한 추가 리소스를 권장 할 수 있습니까? 늘 그렇듯이, 도와 주셔서 감사합니다.

+1

"큰 SQL 데이터베이스가 있습니다"- 정의가 큽니다 ... –

+0

이 질문에 대해 이베이 또는 이와 비슷한 크기 인 – smartcaveman

답변

0

그것은 당신이 당신의 XML로해야 할 일에 따라 달라집니다. 비슷한 구조의 테이블 구조가 "generic"으로 만들어졌고 제품 고유의 것이 XML 필드에 숨겨져 있습니다.

우리는 XML을 쿼리하는 것이 예외적으로 빠르지 않고 XML 인덱스 (SQL Server가 제공함)를 사용하여 데이터베이스 크기가 대략 1GB에서 10GB 이상으로 증가하는 어려운 방법을 발견했습니다.

  • 그에서 값을 추출의 매개 변수
  • 으로 XML 내용을 가져 오는 사용자 정의 함수를 만듭니다 ...

    은 우리가 XML에서 선택 요소에 대해 지금하고있는 것은 이것이다 XML 매개 변수

  • 해당 UDF t o 부모 테이블에서 계산되고 지속되는 열을 정의하십시오.

이렇게하면 특정 키 값 (예 : "ProductID"또는 "ProductName")을 XML에서 가져 와서 부모 테이블에 열로 저장합니다. 계산 된 값입니다 (예 : 항상 최신이며, 또한 지속되므로 테이블 데이터와 함께 저장됩니다. 끊임없이 다시 쿼리되거나 다시 계산되지는 않습니다. 테이블 데이터가 유지되므로 색인을 추가 할 수도 있습니다.

이 방법은 잘 작동하지만 XML에서 분리하려는 단일 값의 것들을 분리 한 경우에만 작동합니다. 이 경우에는 훌륭한 솔루션이며, 몇 가지 순서로 해당 값에 대한 쿼리를 빠르게 처리합니다.

+0

이 솔루션을 고려한 결과 현재 프로젝트 도메인에서 작동합니다. 미래의 다각화를 고려할 때, 나는 그것을 검색 가능한 것으로 유지하고 싶지만,보다 구체적인 검색이 여전히 수행 될 수 있다면 일반적인 검색 기능이 이러한 방식으로 처리 될 수 있다고 생각한다. 이 방법이 확장 성과 확장성에 어떤 영향을 줍니까? – smartcaveman

+0

@smartcaveman : INT 또는 짧은 문자열로 끝나는 요소는 매우 잘 작동합니다. XML을 포함하는 테이블에서 계산 된 열을 유지하도록 만들 수 있으며, 이들은 보통의 INT 또는 VARCHAR 열과 절대적으로 비슷합니다. 확장 성은 전혀 문제가되지 않습니다. –

0

질문에 정확하게 대답하지는 않지만 다른 검색 전략에 대해 생각하는 것이 좋습니다. SQL Server/Oracle과 MySQL은 모두 다량의 관계형 데이터를 저장하는 데 탁월합니다. 그러나 대부분의 경우 텍스트를 검색하는 데는별로 좋지 않습니다 (분명히 검색 대상과 색인에 따라 다릅니다).

나는 Lucene과 같은 검색 엔진을 보면서 약간의 시간을 들여 귀하의 요구 사항을 SQL보다 좋을 것이라고 제안합니다.

+0

이라고 가정 해 봅시다 - 최적화 전략은 현재 데이터베이스를 사용하지 않는 것입니까? 나는 속임수를 부른다. –

0

예상 실행 계획을 보여줍니다. 또한

:

SET STATISTICS IO ON 
SET STATISTICS TIME ON