首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询生产耗时

查询生产耗时
EN

Stack Overflow用户
提问于 2019-05-20 18:56:32
回答 2查看 41关注 0票数 0

我们有这样的查询,我们试图识别具有多个信用选项指示器的客户。我们必须在报告中反映此查询输出,并将其分享给业务用户。我们几乎每周都要运行这个查询,而且这个查询需要时间。

查询

代码语言:javascript
复制
select CUST_ID, CUST_COUNT from (
SELECT N.CONS_ID AS CUST_ID,
COUNT(DISTINCT(case when M.CO_ID is null then 1 else m.co_id end)) AS CUST_COUNT
FROM CTS_VIEW.CNSLD_CREDIT_SUM M
INNER JOIN  CTS_VIEW.LEGACY_CODE_XREF  N
ON M.EE_ID = N.EE_GBL_IND
WHERE M.PROD_DT >= DATE '2018-12-31'
GROUP BY N.CONS_ID
  ) a
where CUST_COUNT>1;

有没有更好的方法来编写这个查询来加速执行时间。我们已经应用了CBO,并在会话级别启用了矢量化。

EN

回答 2

Stack Overflow用户

发布于 2019-05-20 20:05:51

也许使用这样的临时表可以使查询速度更快。同时,您应该检查这些表所需的索引。

代码语言:javascript
复制
SELECT N.CONS_ID AS CUST_ID,
COUNT(Distinct(Isnull(M.CO_ID,1))) AS CUST_COUNT
Into #Temp
FROM CTS_VIEW.CNSLD_CREDIT_SUM M
INNER JOIN  CTS_VIEW.LEGACY_CODE_XREF  N
ON M.EE_ID = N.EE_GBL_IND
WHERE M.PROD_DT >= DATE '2018-12-31'
GROUP BY N.CONS_ID

select CUST_ID, CUST_COUNT from 
#Temp
where CUST_COUNT>1;
票数 0
EN

Stack Overflow用户

发布于 2019-05-21 14:27:17

我认为CTE或Common Table表达式对于这些目的来说是很好的-

代码语言:javascript
复制
SELECT CUST_ID,CUST_COUNT FROM (
WITH M_RAW_CTE AS 
(SELECT CO_ID,EE_ID,PROD_DT FROM CTS_VIEW.CNSLD_CREDIT_SUM),
M_CTE AS 
(SELECT * FROM M_RAW_CTE WHERE PROD_DT >= DATE '2018-12-31'), 
N_CTE AS 
(SELECT CONS_ID,EE_GBL_IND FROM LEGACY_CODE_XREF) 

SELECT N_CTE.CONSID AS CUST_ID,
COUNT(DISTINCT(ISNULL(M.CO_ID,1))) AS CUST_COUNT
INNER JOIN N_CTE ON M_CTE.EE_ID = N_CTE.EE_GBL_IND
GROUP BY N_CTE.CONS_ID)
WHERE CUST_COUNT > 1;

使用CTE背后的概念是提高DDL中数据的可重用性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56219507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档