sql – 如何使用有效日期的数据加速对大型数据仓库表的查询?

前端之家收集整理的这篇文章主要介绍了sql – 如何使用有效日期的数据加速对大型数据仓库表的查询?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我在查询一些非常大的表格.它们如此之大的原因是因为PeopleSoft每次对某些数据进行更改时都会插入新记录,而不是更新现有记录.实际上,它的事务表也是一个数据仓库.

这需要在其中嵌套选择的查询,以获取最新/当前行.它们都是有效的,并且在每个日期内(施放到一天)它们可以具有有效的序列.因此,为了获取user_id = 123的当前记录,我必须这样做:

select * from soMetable st
where st.user_id = 123
and st.effective_date = (select max(sti.effective_date) 
  from soMetable sti where sti.user_id = st.user_id)
and st.effective_sequence = (select max(sti.effective_sequence) 
  from soMetable sti where sti.user_id = st.user_id
  and sti.effective_date = st.effective_date)

这些表上有非常多的索引,我找不到任何能加速查询的东西.

我的麻烦在于我经常想要从这些表中获取有关个人的数据,可能有50个user_ids,但是当我加入我的表中只有少数几个这样的PeopleSoft表的记录时,事情就变成了废话.

PeopleSoft表位于我通过数据库链接访问的远程数据库中.我的查询看起来像这样:

select st.* from local_table lt,soMetable@remotedb st
where lt.user_id in ('123','456','789')
and lt.user_id = st.user_id
and st.effective_date = (select max(sti.effective_date) 
  from soMetable@remotedb sti where sti.user_id = st.user_id)
and st.effective_sequence = (select max(sti.effective_sequence) 
  from soMetable@remotedb sti where sti.user_id = st.user_id
  and sti.effective_date = st.effective_date)

当我必须使用本地表连接多个PeopleSoft表时,事情变得更糟.性能是不可接受的.

我可以做些什么来提高性能?我已经尝试过查询提示,以确保我的本地表首先加入其PeopleSoft中的合作伙伴,因此在将其缩小到正确的user_id之前,它不会尝试将所有表连接在一起.我已经尝试了LEADING提示并玩弄了一些试图将处理推送到远程数据库提示,但解释计划被模糊了,只是对几个操作说’REMOTE’,我不知道发生了什么.

假设我没有权力改变PeopleSoft和我的桌子的位置,提示是我最好的选择吗?如果我加入一个带有四个远程表的本地表,并且本地表与两个远程表连接,我将如何格式化提示以便我的本地表(这是非常小的 – 事实上,我可以只进行内联视图让我的本地表只是我感兴趣的user_ids)首先与每个远程表连接?

编辑:应用程序需要实时数据,所以不幸的是,物化视图或其他缓存数据的方法是不够的.

解决方法

是否重构您的查询有点像这样的帮助?
SELECT *
  FROM (SELECT st.*,MAX(st.effective_date) OVER (PARTITION BY st.user_id) max_dt,MAX(st.effective_sequence) OVER (PARTITION BY st.user_id,st.effective_date) max_seq
          FROM local_table lt JOIN soMetable@remotedb st ON (lt.user_id = st.user_id)
         WHERE lt.user_id in ('123','789'))
 WHERE effective_date = max_dt
   AND effective_seq = max_seq;

我同意@Mark Ba​​ker的说法,加入DB Links的表现真的很糟糕,你可能会受限于你用这种方法可以完成的任务.

原文链接:https://www.f2er.com/mssql/75770.html

猜你在找的MsSQL相关文章