消除性能开销

时间:2013-03-06 12:15:18

标签: c# .net sql sql-server database

我已将应用程序中的性能开销缩小到此块:

Server currentServer = new Server(databaseConnection.DataSource);
Database currentDatabase = currentServer.Databases[databaseConnection.InitialCatalog];

foreach (View view in currentDatabase.Views)
{
    if (view.IsSystemObject == false)
    {
        if (view.Name.Equals(viewName))
        {
            MessageBox.Show(parent, "A virtual table with that name already exists! Virtual\ntable not created.", "Not created", MessageBoxButton.OK, MessageBoxImage.Information);
            break;
         }
         else
         {
             valid = true;
             break;
         }
    }
}

我基本上想要迭代不属于系统的数据库视图。但是,使用此方法,SMO库会遍历所有视图,无论如何。知道如何安排吗?

修改

例如,我只有大约10个用户定义的视图,但超过1000个系统视图。如何跳过系统视图并仅遍历用户定义的视图?

1 个答案:

答案 0 :(得分:2)

目前尚不清楚您正在使用哪种API - 但如果您使用常规TSQL / ADO.NET,您可以查看INFORMATION_SCHEMA.VIEWS / sys.views之类的内容,其中只包含用户 - 定义的视图。系统视图位于sys.system_views中(均位于sys.all_views中)。这将执行服务器上的所有限制 ,因此,如果您查询INFORMATION_SCHEMA.VIEWS / sys.views,则通过网络返回的唯一数据是您感兴趣的数据。如果您在客户端过滤,则需要付费以传输感兴趣的所有数据。