기존 데이터베이스의 SQL Server 관리 개체 탐색 속도를 높일 수 있는 방법이 있습니까?
-
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
}
}
다른 팁
각 데이터베이스에서 시스템 뷰를 사용하고 기존 쿼리를 사용하십시오.
TSQL 쿼리를 통해 얻을 수없는 것은 거의 없습니다. 그런 식으로 메타 데이터를 얻는 것은 일반적으로 매우 빠릅니다.
제휴하지 않습니다 StackOverflow