sql – 为什么选择Top子句可能会导致很长的时间成本
发布时间:2020-12-12 16:29:01 所属栏目:MsSql教程 来源:网络整理
导读:以下查询将永远完成.但是,如果我删除前10个子句,它会很快完成. big_table_1和big_table_2是2个表,10 ^ 5个记录. 我以前认为顶级条款会减少时间成本,但显然不在这里.为什么??? select top 10 ServiceRequestIDfrom ( (select * from big_table_1 where big_
以下查询将永远完成.但是,如果我删除前10个子句,它会很快完成. big_table_1和big_table_2是2个表,10 ^ 5个记录.
我以前认为顶级条款会减少时间成本,但显然不在这里.为什么??? select top 10 ServiceRequestID from ( (select * from big_table_1 where big_table_1.StatusId=2 ) cap1 inner join big_table_2 cap2 on cap1.ServiceRequestID = cap2.CustomerReferenceNumber ) 解决方法在同一主题(底部的链接)上还有其他的stackoverflow讨论.如上述注释所示,它可能与索引和优化器变得困惑并使用错误有关.我的第一个想法是,您正在(select * ….)中选择顶级的serviceid,而优化器可能难以将查询推送到内部查询并使用索引. 考虑重写它 select top 10 ServiceRequestID from big_table_1 inner join big_table_2 cap2 on cap1.servicerequestid = cap2.customerreferencenumber and big_table_1.statusid = 2 在查询中,数据库可能会尝试合并结果并返回它们,然后将其限制在外部查询中的前10名.在上述查询中,数据库只能在结果合并时收集前10个结果,从而节省了时间.如果servicerequestID被索引,则一定要使用它.在您的示例中,查询正在查找已经以虚拟,无索引格式返回的结果集中的servicerequestid列. 希望有道理虽然假设优化器应该采用我们把SQL放入的任何格式,并计算出每次返回值的最佳方法,但事实是,我们将SQL放在一起的方式真的可以影响在DB. SELECT TOP is slow,regardless of ORDER BY Why is doing a top(1) on an indexed column in SQL Server slow? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |