我是一个在启动时运行少量查询的c#项目。我试图找出是否可以优化执行时间。其他查询的时间不到100毫秒,但此查询速度稍慢。
SELECT * FROM
fn_listextendedproperty(default, default, default, default, default, default, default)
where name = 'CUSTOM_EX_PROP'
301 ms
这是正常的吗?这个查询可以优化吗?有没有更快的方法来读取数据库扩展属性?
以下是我的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问题,让我告诉实际场景。数据库的版本存储在其扩展属性中,当我连接到数据库时,我只想确保版本正确。这就是我在启动时阅读其扩展属性的原因。
答案 0 :(得分:1)
您无法优化系统功能;
如果您不喜欢它,请编写自己的功能并使用它而不是此功能。
可以通过执行
获得此功能的文本Regex.Matches
答案 1 :(得分:1)
检查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