c# – 我可以在fn_listextendedproperty上优化SQL选择吗?

我有一个c#项目,在启动时运行很少的查询.我试图找出是否可以优化执行时间.其他查询的时间不到100毫秒,但此查询速度稍慢.

SELECT * FROM 
  fn_listextendedproperty(default, default, default, default, default, default, default) 
  where name = 'CUSTOM_EX_PROP'

301毫秒

这是正常的吗?这个查询可以优化吗?有没有更快的方法来读取数据库扩展属性?

这是我的c#代码以防万一

var watch = System.Diagnostics.Stopwatch.StartNew ();
using (SqlDataAdapter sda = new SqlDataAdapter (new SqlCommand (query, _con))) {
    sda.Fill (dt);
}
watch.Stop ();
var elapsedMs = watch.ElapsedMilliseconds;
System.Diagnostics.Debug.Print (query + "\r\n" + elapsedMs.ToString () + " ms");

编辑 – 正如@Liam指出它闻起来有问题,我也要告诉实际情况.数据库的版本存储在其扩展属性中,当我连接到数据库时,我只想确保版本正确.这就是我在启动时阅读其扩展属性的原因.

最佳答案 检查fn_listextendedproperty的代码显示它来自一个视图..但是有许多其他参数可能不需要你

 insert @ids select object_id, name from sys.objects  
  where schema_id = @major  
  and parent_object_id = 0  
  and 0 <> charindex( '.'+type+'.',  
   case @level1type  
    when 'TABLE' then '.U .'  
    when 'VIEW' then '.V .'  
    when 'RULE' then '.R .'  
    when 'DEFAULT' then '.D .'  
    when 'QUEUE' then '.SQ.'  
    when 'SYNONYM' then '.SN.'  
    when 'AGGREGATE' then '.AF.'  
    when 'FUNCTION' then '.TF.FN.IF.FS.FT.'  
    when 'PROCEDURE' then '.P .PC.RF.X .'  
    when 'SEQUENCE' then '.SO.'  
    end )  
end  

-- Now get properties from id-s obtained, and return  
--  
insert @tab select @basetype, i.nam, p.name, p.value  
 from sys.extended_properties p join @ids i on p.class = @class and p.major_id = i.maj  
 where p.minor_id = 0 and (@name is null or @name = p.name)  

因此,请尝试从视图中进行选择,看看它是否在您的案例可接受的速度限制范围内

select * from 
sys.extended_properties
点赞