我有一个 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/