기존 데이터베이스의 SQL Server 관리 개체 탐색 속도를 높일 수 있는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/401740

  •  03-07-2019
  •  | 
  •  

문제

저는 현재 SMO와 C#을 사용하여 데이터베이스를 탐색하여 두 데이터베이스의 다양한 측면을 나타내는 설정 트리를 만든 다음 이 트리를 비교하여 위치와 차이점을 확인하고 있습니다.

문제는 적당한 크기의 데이터베이스 2개를 로컬에서 크롤링하고 비교하려는 테이블/열/저장 프로시저 정보를 수집하는 데 거의 10분이 걸린다는 것입니다.

이러한 방식으로 데이터베이스에 액세스할 수 있는 SMO보다 더 나은 인터페이스가 있습니까?추가 종속성을 포함하고 싶지 않지만 50% 속도 향상을 위해 그 고통을 감수하겠습니다.다음은 테이블과 열을 열거하는 방법에 대한 샘플입니다.

        Microsoft.SqlServer.Management.Smo.Database db = db_in;
        foreach (Table t in db.Tables)
        {
            if (t.IsSystemObject == false)
            {

                foreach (Column c in t.Columns)
                {
                }                    
            }
        }
도움이 되었습니까?

해결책

액세스에 대해 쿼리하는 대신 SMO가 모든 필수 필드를 한 번에 읽도록 ​​강제해 보세요.보다 이 블로그 자세한 내용은


편집하다:링크가 죽었으나 찾았습니다 그 페이지 archive.org에서.관련 코드는 다음과 같습니다.

Server server = new Server();

// Force IsSystemObject to be returned by default.
server.SetDefaultInitFields(typeof(StoredProcedure), "IsSystemObject");

StoredProcedureCollection storedProcedures = server.Databases["AdventureWorks"].StoredProcedures;

foreach (StoredProcedure sp in storedProcedures) {
    if (!sp.IsSystemObject) {
        // We only want user stored procedures
    }
}

다른 팁

각 데이터베이스에서 시스템 뷰를 사용하고 기존 쿼리를 사용하십시오.

http://www.microsoft.com/downloads/details.aspx?familyid=2ec9e842-40be-4321-9b56-92fd3860fb32&displaylang=en

TSQL 쿼리를 통해 얻을 수없는 것은 거의 없습니다. 그런 식으로 메타 데이터를 얻는 것은 일반적으로 매우 빠릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top