c# - 我可以优化 fn_listtextendedproperty 上的 SQL 选择吗?

标签 c# sql sql-server

我有一个 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 指出的那样,它闻起来有 XY 问题,让我也告诉您实际情况。数据库的版本存储在它的扩展属性中,当我连接到数据库时,我只想确保版本正确。这就是我在启动时读取其扩展属性的原因。

最佳答案

检查 fn_listtextendedproperty 的代码显示它来自一个 View ..但是有一堆你可能不需要的其他参数

 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)  

因此请尝试从 View 本身进行选择,看看它是否在您可接受的速度限制范围内

select * from 
sys.extended_properties

关于c# - 我可以优化 fn_listtextendedproperty 上的 SQL 选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45480447/

相关文章:

c# - 早期绑定(bind)类的使用

sql - 关于 LINQ 最高性能方法的思考

sql - select 语句可以包含嵌套结果集吗?

SQL Server 存储过程将选择结果导出到 CSV

c# - 如何从 ASP.NET 进程转储到托管调用堆栈?

c# - 使用反射设置值 - 转换错误

c# - 在 web api Controller (.net 核心)中使用异步/等待或任务

c# - 避免 SQL 查询、预订应用程序中的重复值

asp.net - 我可以将 ASP.NET 成员身份与 SQL Server Compact Edition 一起使用吗?

sql-server - 将大量数据粘贴到 Excel