Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
SELECT TOP是否始终是在SQL上获取所需查询预览的最快方法?_Sql_Sql Server - Fatal编程技术网

SELECT TOP是否始终是在SQL上获取所需查询预览的最快方法?

SELECT TOP是否始终是在SQL上获取所需查询预览的最快方法?,sql,sql-server,Sql,Sql Server,我运行了以下查询: SELECT TOP 100 certs.CertId, COUNT(cluster.BGTJobId) C FROM [CentralDB_US_33].[dbo].[JobSkillClusterIndex] cluster INNER JOIN [Eagle].[raw].[certs] certs ON certs.BGTJobId = cluster.BGTJobId GROUP BY cluster.skillClusterId, certs.CertId

我运行了以下查询:

SELECT TOP 100 certs.CertId, COUNT(cluster.BGTJobId) C
FROM [CentralDB_US_33].[dbo].[JobSkillClusterIndex] cluster 
INNER JOIN [Eagle].[raw].[certs] certs 
  ON certs.BGTJobId = cluster.BGTJobId
GROUP BY cluster.skillClusterId, certs.CertId

最终,我想得到完整的结果,不仅仅是前100名,而且为了预览,这是最快的方法吗?

是的,出于预览目的,top select查询最快,这就是为什么它也显示在management studio GUI右键单击中。但是如果您正在运行自定义查询,只需检查where子句/grouping等是否是聚集索引的一部分。

因为您提到这是为了预览,所以我假设您只想从查询中获取数据,并且希望它快速运行,而不管返回的数据是什么,鉴于您提到执行查询需要14分钟,一个快速的“黑客修复”方法是使用以下内容:

SELECT
    certs.CertId
    , COUNT(cluster.BGTJobId)
FROM
    (SELECT TOP 100 
        certs.CertId
    FROM [Eagle].[raw].[certs] certs) certs
INNER JOIN [CentralDB_US_33].[dbo].[JobSkillClusterIndex] cluster 
    ON certs.BGTJobId = cluster.BGTJobId
GROUP BY cluster.skillClusterId, certs.CertId
在案例计数中聚合数据是一项非常昂贵的操作,应该只在查询的最后一部分使用尽可能少的数据来完成。这就是为什么出于预览目的,我选择了onyl前100个证书,并对这些数据进行了计数

但是,因为您提到查询需要14分钟才能运行,所以问题出在其他地方,这通常是由于设计查询设计、索引设计甚至表设计造成的

您应该问问自己是否真的想检查表中的所有数据并从两个表中获取所有匹配的行,您是否可能缺少WHERE子句

如果您确定需要WHERE子句,是否有任何索引可以帮助根据WHERE子句的条件甚至连接列certs.BGTJobId和cluster.BGTJobId筛选数据


SELECT TOP子句用于指定要返回的记录数…我不知道预览是什么。这取决于您所说的预览是什么意思-您的意思是什么?我保证TOP 1会更快。不,它不保证会更快-就是这样-尽管原始查询只返回35行,添加前30名实际上会将执行时间增加10-100倍。添加TOP通常会加快查询速度,但它会完全改变执行计划,引入TOP会导致从合并连接切换到嵌套循环连接,并大幅增加执行时间。忽略表的名称,它们是我正在使用的数据库的主观定义的分类法。