c# - T-SQL 查询超时/性能问题

标签 c# sql-server tsql sql-server-2008

我有一张大约有 100 万条记录的表。表结构如下所示。 UID 列是主键和唯一标识符类型。

Table_A(包含一百万条记录)

UID                                            Name
-----------------------------------------------------------
E8CDD244-B8E4-4807-B04D-FE6FDB71F995           DummyRecord

我还有一个函数叫做 fn_Split('Guid_1,Guid_2,Guid_3,....,Guid_n')接受逗号列表
分离 guid 并返回一个包含 guid 的表变量。

从我的应用程序代码中,我传递了一个 sql 查询以获取新的 guid [与应用程序代码一起但不在数据库表中的键]
var sb = new StringBuilder();
sb
.Append(" SELECT NewKey ")
.AppendFormat(" FROM fn_Split ('{0}') ", keyList)
.Append(" EXCEPT ")
.Append("SELECT UID from Table_A");

第一次执行此命令时,它会在很多情况下超时。我试图找出什么是更好的方法来避免这种超时和/或提高性能。

谢谢。

最佳答案

如果没有,首先在 table_a.uid 上添加一个索引,但我假设有。

尝试一些替代查询,

select newkey 
from fn_split
left outer join table_a
on newkey = uid
where uid IS NULL


select newkey 
from fn_split(blah)
where newkey not in (select uid 
                     from table_a)

select newkey 
from fn_split(blah) f
where not exists(select uid 
                 from table_a a 
                 where f.newkey = a.uid)

关于c# - T-SQL 查询超时/性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4383136/

相关文章:

c# - 如何从执行程序集引用库?

c# - 允许支持者以其他用户身份登录

sql - IF..ELSE block 不工作 SQL

C++ STL set<T> 的 C# 替代方案

c# - 从 Windows Azure 存储检索图像 (Base64String)

c# - 尝试将 SqlDataAdapter 中的 SqlCommand 作为参数传递

mysql - 从表中选择前 N 行

sql - 如何找出连接正在使用哪个数据库?

sql-server - 什么时候应该在 SQL Server 中使用分号?

sql - 添加非空列从其他列取值