加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL查询 – 需要提高性能

发布时间:2020-12-12 08:51:10 所属栏目:MsSql教程 来源:网络整理
导读:我有一个数据加载场景,我在其中创建动态SQL查询以在我们的服务中提取数据和缓存.有1个表包含所有产品数据:ProductHistory(47列,200,000条记录并将继续增长) 我需要的: 使用最大ID,最大版本和最大更改来获取最新产品. 第一次尝试: SELECT distinct Product.
我有一个数据加载场景,我在其中创建动态SQL查询以在我们的服务中提取数据和缓存.有1个表包含所有产品数据:ProductHistory(47列,200,000条记录并将继续增长)

我需要的:
使用最大ID,最大版本和最大更改来获取最新产品.

第一次尝试:

SELECT distinct Product.* FROM ProductHistory product 
WHERE  product.version = 
(SELECT max(version) from ProductHistory p2 where product.Id = p2.Id 
  and product.changeId = 
(SELECT max(changeid) from ProductHistory p3 where p2.changeId = p3.changeId))

这耗时超过2.51分钟.

其他失败的尝试:

select distinct product.* from ProductHistory product 
where CAST(CAST(id as nvarchar)+'0'+CAST(Version as nvarchar)+'0'+CAST(changeid as nvarchar) as decimal) = 
(select MAX(CAST(CAST(id as nvarchar)+'0'+CAST(Version as nvarchar)+'0'+CAST(changeid as nvarchar) as decimal)) from ProductHistory p2 
where product.Id = p2.Id)

它基本上使用与订购日期时相同的原则,连接按相关性排序的数字.

For example 11 Jun 2007 = 20070711
And in our case: Id = 4,version = 127,changeid = 32   => 40127032
The zeros are there not to mix up the 3 different ids

但是这个需要3.10分钟!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读