【发布时间】:2021-08-22 23:52:26
【问题描述】:
问题是关于 Oracle 11g、Exadata。
我有一个大型临时表(超过 1000 万行),其中有一列显示事务发生位置的事务描述
TRANSACTION_DESCRIPTION
_______________________
KMART 19028 New jers
JC Penny 32f8d New Jers
KMARTStore 23101xg Los Ang
JCPenny Austin
Amazon Prime Calif
MACYS DALLAS
我有一个将各个商店与其母公司汇总的参考表。我可以买到像 JC Penny 或 JCPENNY 或 jcpenny 这样的单个商店的任何变体。
参考存储表的样子
Store_to_Search Aggregator_Store
_____________________________________
JC Penny JCPenny
JCPENNY JCPenny
JCPenny JCPenny
Macy Macy's
Macys Macy's
Macy's Macy's
我在 Transaction_description 上找到 Store_to_search 以查找匹配的聚合器。我对 Transaction_description 字段中的其他内容不感兴趣。 这是连接条件。
ON REGEXP_LIKE(T.TRAN_DESCRIPTION, '(^)' || S.STORE_TO_SEARCH )
Transaction_Description 和 Store_to_Search 均已编入索引,不唯一。
运行选择会在大约 5-6 分钟内返回数据。如果我删除这个维度表,那么我会在大约 1-2 分钟内得到结果。
但是,插入最终的 FACT 表需要 2-3 小时以上的时间。这是不可接受的。
事实表在插入时没有任何索引。 Fact 表中也没有分区。
我想要一些关于如何改进的建议 -
- 插入(使用提示?)
- 整个概念 - 有没有更好的方法来实现我想要实现的目标?
另外-我不是甲骨文的人。更多的 SQL Server,如果我们可以迁移到另一个团队使用的 Oracle,这是一个原则证明。
非常感谢任何帮助。
谢谢
【问题讨论】:
-
我在大约 1-2 分钟内得到结果 - 这真的是获取所有值或仅获取前几行的时间吗?使用
gather_plan_statistics提示执行插入,然后使用以下命令检查执行的计划:select * from table(dbms_xplan.display_cursor(format => 'ALL ALLSTATS LAST)) -
谢谢@astentx 好点。它使用 SQL Developer 返回前 50 个。我将不得不阅读如何做你提到的接下来的两件事。我会回来的。
-
请提供您用于插入的实际查询
标签: sql oracle insert sql-insert large-data