【发布时间】:2021-08-22 10:10:18
【问题描述】:
尝试从全局临时表中优化 select 语句,没有连接。 我尝试对所有被选择的列和操作提示进行索引。 删除了索引,只是创建了一个主键索引并用于操作提示。两者都没有运气。请建议..
SELECT /*+ INDEX(fim_mp_po_lcm_gt_tst,PK_PO_HEADER_ID_TST) */
fmpl.operating_unit "Business Unit",
fmpl.period_name "Period Name",
TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS') "Report Date/Time" ,
fmpl.po_number "PO Number",
fmpl.po_brand "Brand",
fmpl.po_channel "Channel",
fmpl.dest_country "Destination",
fmpl.po_status "PO Status",
fmpl.currency_code "Currency",
TO_CHAR(fmpl.elc_Date,'DD-MON-YYYY') "ELC Date",
fmpl.elc_amt "Current Period ELC",
fmpl.alc_amt "Current Period ALC",
fmpl.variance_Amt "Variance Booked"
FROM FIM_MP_PO_LCM_GT_TST fmpl
显然索引没有被使用
SQLQuery:EXPLAIN PLAN SET STATEMENT_ID = 'dm_plan_Q_210604_114114' FOR
SELECT
fmpl.operating_unit "Business Unit",
fmpl.period_name "Period Name",
TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS') "Report Date/Time" ,
fmpl.po_number "PO Number",
fmpl.po_brand "Brand",
fmpl.po_channel "Channel",
fmpl.dest_country "Destination",
fmpl.po_status "PO Status",
fmpl.currency_code "Currency",
TO_CHAR(fmpl.elc_Date,'DD-MON-YYYY') "ELC Date",
fmpl.elc_amt "Current Period ELC",
fmpl.alc_amt "Current Period ALC",
fmpl.variance_Amt "Variance Booked"
FROM "FIM_MP_PO_LCM_GT_TST" fmpl
SQL Query Timeout: 600
Number of SQL Executions: 1
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------
Plan hash value: 1118455586
--------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 454 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS STORAGE FULL| FIM_MP_PO_LCM_GT_TST | 1 | 454 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------
【问题讨论】:
-
如果您选择没有连接或过滤器的整个表,全表扫描是最快的,不要尝试使用索引。
-
但显然它需要很长时间,然后在 3 小时后超时,(从 BI 发布者数据模型运行此)而填充表的插入语句大约需要 15 分钟。
-
听起来问题出在 BI Publisher 端,而不是表或数据?
-
可能是..但是对于较小的数据集,它只是在几秒钟内返回值..
-
更有理由怀疑 BI Publisher 方面;您是否尝试过直接在托管数据库的服务器上执行查询?我见过很多次是网络/应用程序设置减慢了速度。是时候隔离发生缓慢的地方了。如果您edit 您的问题有更多详细信息,例如“通过 BI Publisher 返回 1,000 行的查询需要 23 秒,通过 SQLPlus 需要 1.2 秒,返回 100,000 行的查询在 BI 中需要 3.3 小时和 3.3 分钟在 SQLPLus 中"
标签: oracle optimization indexing plsql