SELECT TOP总是在SQL上预览您想要的查询的最快方法吗?

时间:2016-11-07 16:49:51

标签: 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

最终,我希望得到完整的结果而不仅仅是前100名,但出于预览目的,这是最快的方式吗?

2 个答案:

答案 0 :(得分:1)

由于您之前提到这是出于预览目的,所以我假设您只想从查询中获取数据,并且您希望它运行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 而不管它返回的数据是什么,并且看到你提到查询需要14分钟才能执行,快速修复'将使用如下的东西:

COUNT

聚合数据(在您的情况下为COUNT)是一项非常昂贵的操作,只应在查询的最后部分尽可能少地进行数据处理。这就是为什么,为"预览"目的我选择了onyl前100个证书并对该数据进行了WHERE

但是,因为您提到查询需要14分钟才能运行,问题出在其他地方,通常这是由于设计(查询设计,索引设计甚至表格设计)。

  • 你应该问问自己,你是否真的想要查看表格中的所有数据,并从两个表格中获取所有匹配的行,并且你可能不会错过WHERE条款?

  • 如果您确定需要WHERE子句,是否有任何索引可以根据certs.BGTJobId子句的条件(甚至连接列 - 帮助过滤数据) cluster.BGTJobId .btn1{ background:#0095ff; border:0; outline:0; font-weight:400; color:#fff; font-size: 16px; padding: 6px 15px; transition: all .4s ease; cursor:pointer; text-transform:uppercase; } .btn1:hover{ font-weight:600; background:#07c; } .btn2{ background:#0095ff; border:0; outline:0; font-weight:400; color:#fff; font-size: 16px; padding: 6px 15px; transition: all .4s ease; cursor:pointer; text-transform:uppercase; min-width:150px; } .btn2:hover{ font-weight:600; background:#07c; }

答案 1 :(得分:0)

是顶部选择查询是最快的预览目的,为什么它也显示在管理工作室GUI右键单击。但是,如果您正在运行自定义查询,请检查where子句/分组等是否已完成,这是聚簇索引的一部分。