我有以下查询:
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名,但出于预览目的,这是最快的方式吗?
答案 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子句/分组等是否已完成,这是聚簇索引的一部分。