暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 优化查询

askTom 2017-10-17
203

问题描述

我想优化以下查询

选择t.merchant_id,
t.品牌标识,
t.交易类型,
t.trns_currency_code,
COUNT (*) AS total_no_tx,
SUM (t.mv_is_trnx_approved) AS approved_no_tx,
COUNT (t.mv_is_trnx_approved) AS count_approved_trnx,
SUM (t.mv_total_sales) AS total_sales,
COUNT (t.mv_total_sales) AS count_total_sales,

TRUNC (FROM_TZ (CAST (t.order_date作为时间戳),'GMT') 在时区m.时区) 作为交易日期
来自dmart.trxns t,mdb.merchant m
其中t.merchant_id = m.merchant_id
按t.merchant_id分组,
t.品牌标识,
t.交易类型,
t.trns_currency_code,
TRUNC (FROM_TZ (CAST (t.order_date作为时间戳),'GMT') 在时区m.时区)

问题是这两个表都有数百万条记录,计数和总和需要大量时间来执行。我已经在mv_is_trnx_approved和mv_total_sales上创建了索引。请有其他方法。

专家解答

“问题是两个表都有数百万条记录” 与

a) 这似乎是一个标准的父/子关系 (即,每个txn都会有一个商人)
b) 除了连接之外,没有其他标准
c)the absence of any other information

你最好的选择是probably哈希连接和索引几乎没有好处。

所以你可以试试as a first step提示:

使用哈希 (t) 前导 (m t) 满 (m) 满 (t)

如果这给了你你想要的性能,然后看看为什么优化器没有自动做到这一点 (糟糕的统计数据等)。

如果没有,则进行跟踪,并查看丢失的时间-您可能还有其他问题 (存储速度慢,cpu不足) 等
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论