Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向sql语句中添加“TOP1”是否会显著提高性能?_C#_Sql_Linq To Sql - Fatal编程技术网

C# 向sql语句中添加“TOP1”是否会显著提高性能?

C# 向sql语句中添加“TOP1”是否会显著提高性能?,c#,sql,linq-to-sql,C#,Sql,Linq To Sql,在SQL查询中,将TOP 1添加到 SELECT TOP 1 [values] FROM [TABLE] where [TABLE].Value = "ABC" 当我知道只有一个记录时,给我一个性能提升?具体地说,我在考虑LinqToSql以及两种方法之间的差异。。。还有。首先…,在哪里。首先。。。将前1添加到生成的sql LinqToSql已经感觉很慢了,所以我只是想想办法让它更快 编辑:[表]。值在某些情况下可能是外键 不,这可能会使您的查询速度变慢,因为可能必须先进行排序。单个和第一个

在SQL查询中,将TOP 1添加到

SELECT TOP 1 [values] FROM [TABLE] where [TABLE].Value = "ABC" 
当我知道只有一个记录时,给我一个性能提升?具体地说,我在考虑LinqToSql以及两种方法之间的差异。。。还有。首先…,在哪里。首先。。。将前1添加到生成的sql

LinqToSql已经感觉很慢了,所以我只是想想办法让它更快


编辑:[表]。值在某些情况下可能是外键

不,这可能会使您的查询速度变慢,因为可能必须先进行排序。

单个和第一个具有不同的用途

单身是指你描述的情况。您总是希望代码尽早失败

如果您是基于主键或唯一索引进行查询,查询优化器将删除顶部。。。无论如何,N子句


在其他情况下,TOP 1可能会对性能产生积极影响,但如果您不想这样做,请不要这样做。

我使用SQL Server的经验告诉我,它会使查询运行得更快

为什么不在列上添加一个唯一索引?

一旦找到第一个结果,TOP 1 select将终止,因此,是的,它可能会更快,这取决于您的查询。另一方面,您真的想考虑数据中未检测到的不一致性的语义和潜在含义。如果真的只有一场比赛的话,单身是最合适的。如果您有多个匹配项,并且正在使用Single,您将得到一个异常,并了解数据或代码中的错误。就你的情况而言,我会用单曲。为了更快地查询,我会考虑在我使用的列中添加一个索引作为鉴别器。

在某些情况下添加顶部子句可以帮助——如果SQLServer预期查询可以返回大量的结果,它可以在预期中锁定表。如果您知道情况并非如此,并且可以使用TOP进行限制,则不会增加开销。

我有一个包含700多万条记录的表,即使使用聚集索引,相对成本也要昂贵得多。如果我选择所有行,我想您的问题可能会包括有关您正在尝试的实际查询以及原因的更多信息,例如,从一个包含10行的表中返回前1行与返回全部10行相比,性能提升可以忽略不计,如果您的表有700万行,则完全是另一回事

我不知道它实际上会做什么,但如果没有ORDER BY,它为什么要进行排序?如果我不使用ORDER BY,它还会进行排序吗?为什么只使用TOP 1调用排序?@Joeforker-这就是我说“潜在”的原因。它可能并不总是这样,但它可以。@Randy-是排序让它慢下来,而不是TOP的使用。仅仅因为您在排序时经常使用TOP,并不意味着使用TOP本身可能会降低您的查询速度。您可以始终使用探查器进行尝试。不幸的是,我没有在此服务器上运行探查器的访问权限。为什么不使用SingleOrDefault,因为如果找不到任何记录,Single也会引发异常?SingleOrDefault在没有找到任何记录时将返回null。Single本质上断言只有一条记录,因此,如果您的代码的其余部分希望如此,您就不必亲自编写所有null检查并抛出异常。