标签: sql-execution-plan

如何格式化sqlplus中的解释计划输出

我相信,问题是不言自明的。sqlplus中的explain plan out表,看起来崩溃了。很难解释每一行。我试图设置 linesize 但它不起作用。你能提供任何建议来格式化输出吗?

解决方案:因为我正在使用 CMD。我只是在sqlplus中调整了CMD的宽度并将行大小设置为132。它按我的预期工作。

谢谢你们

oracle sqlplus sql-execution-plan

2
推荐指数
1
解决办法
7121
查看次数

在java中的整个脚本上运行pig explain命令

我试图找到在java中的整个猪脚本上运行explain命令的方法.我使用的是PigServer,但它只提供单个查询(别名)而不是整个脚本的解释.有没有办法做这样的事情:

$ pig -x local -e 'explain -script Temp1/TPC_test.pig -out explain-out9.txt'
Run Code Online (Sandbox Code Playgroud)

但是从我的Java代码?

java apache-pig sql-execution-plan

2
推荐指数
1
解决办法
2153
查看次数

oracle查询执行计划要转换成hint

我想将以下计划转换为提示。我该怎么做。

在此处输入图片说明

这是需要较长时间的实际查询,请向我们建议相同的解决方案

SELECT AIA.INVOICE_ID,
           AIA.INVOICE_NUM,
           AIA.INVOICE_TYPE_LOOKUP_CODE,
           AIA.BATCH_ID,
           AIA.LAST_UPDATED_BY,
           AIA.INVOICE_DATE,
           AIA.ORG_ID,
           AIA.VENDOR_ID,
           AIA.INVOICE_CURRENCY_CODE,
           AIA.SET_OF_BOOKS_ID,
           AIA.VENDOR_SITE_ID,
           AIA.INVOICE_AMOUNT,
           AIA.BASE_AMOUNT
      FROM AP_INVOICES_ALL AIA
     WHERE  AIA.INVOICE_AMOUNT = 0

         AND   AIA.SET_OF_BOOKS_ID = 1

         AND AIA.CANCELLED_DATE  is null 
         AND EXISTS
     (SELECT  1          
              FROM AP_INVOICE_DISTRIBUTIONS_ALL AIDA,
                   GL_CODE_COMBINATIONS         GCC,
                   FND_LOOKUP_VALUES_VL  FLVC

             WHERE AIDA.INVOICE_id=AIA.INVOICE_id

               AND AIDA.ACCOUNTING_DATE BETWEEN '01-apr-2006' AND
                   sysdate
               AND GCC.CODE_COMBINATION_ID= AIDA.DIST_CODE_COMBINATION_ID  
               AND  FLVC.LOOKUP_CODE=GCC.SEGMENT7
               AND  FLVC.LOOKUP_TYPE = 'NATURAL_ACCT_SERVICE_TAX'
              AND  FLVC.DESCRIPTION IN
                         ('Service Tax', 'Secondary High Edu',
                       'Education Cess'));
Run Code Online (Sandbox Code Playgroud)

这是计划

SELECT STATEMENT, GOAL = ALL_ROWS           Cost=43 Cardinality=1   Bytes=83    
 FILTER                     Parent …
Run Code Online (Sandbox Code Playgroud)

oracle sql-execution-plan

2
推荐指数
1
解决办法
1402
查看次数

来自子查询表的查询是否得到优化?

关于查询优化,我想知道以下语句是否得到优化:

select *
from (
    select *
    from table1 t1
    join table2 t2 using (entity_id)
    order by t2.sort_order, t1.name
)   as foo -- main query of object
where foo.name = ?; -- inserted
Run Code Online (Sandbox Code Playgroud)

考虑到查询是由依赖对象处理的,但只是(正确?)允许一个 WHERE 条件。我认为至少不会有很多数据被提取到您最喜欢的语言中,但是如果这是一个足够的优化并且可能数据库仍然需要一些时间来完成查询,我会重新考虑。

或者最好去掉那个查询并编写一个单独的查询方法,它也有 where 和一个LIMIT 1子句?

mysql sql postgresql sql-execution-plan

2
推荐指数
1
解决办法
100
查看次数

如何可靠地获取查询的 SQL_ID

我知道这似乎是一个简单的问题 - 您可能认为存在现有的答案。然而 ...

了解我希望它具有合理的性能,因此它允许记录执行的每个查询(或者至少是大查询),而无需太多开销。

我的第一个想法是这个查询:

select sid,serial#,prev_sql_id from v$session where audsid=userenv('sessionid');
Run Code Online (Sandbox Code Playgroud)

我的想法是,如果我在目标查询之后立即运行此命令,我将sql_id通过 prev_sql_id 捕获正确的结果。

然而...我不是...我得到了不同的SQL...显然在我的目标 SELECT 语句和 的查询之间prev_sql_id,运行了其他东西。在我的例子中,审计已启用,并且我正在将插入捕获到SYS.AUD$表中。不好。

由于我这次尝试的主要目的是捕获查询的执行计划(因为它是由共享池执行和捕获的),所以我认为我可以简单地运行此查询:

SELECT *
  FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
Run Code Online (Sandbox Code Playgroud)

文档指出,使用NULL SQL_IDas 参数,它将在最近运行的查询上运行解释计划。我希望这能解决之前的问题。然而......我得到了将完全相同的插入到SYS.AUD$表中的计划。

您可能会说,好吧,那么只需在查询中添加注释即可轻松捕获SQL_ID,如下所示:

SELECT /* SQL: 1234-12' */ FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

然后我可以尝试按如下方式查找 SQL_ID:

SELECT * FROM V$SQLAREA WHERE sql_text like '%SQL: 1234-12%';
Run Code Online (Sandbox Code Playgroud)

这将为我提供几个可能的候选者,其中V$SQLAREA也包括查询本身。这里的问题是我需要随机化运行的每个查询,这会导致我总是进行硬解析。

我尝试过其他解决方案来回顾历史,但这需要付出更大的代价。我尝试寻找其他解决方案。他们似乎都在某种程度上落后了。

相关文章:

sql oracle sql-execution-plan

2
推荐指数
1
解决办法
4万
查看次数

postgres 如何决定是使用索引扫描还是序列扫描?

explain analyze显示 postgres 将对我的查询使用索引扫描,该查询获取行并按日期执行过滤(即2017-04-14 05:27:51.039):

explain analyze select * from tbl t where updated > '2017-04-14 05:27:51.039';
                                                          QUERY PLAN                                                          
 -----------------------------------------------------------------------------------------------------------------------------
  Index Scan using updated on tbl t  (cost=0.43..7317.12 rows=10418 width=93) (actual time=0.011..0.515 rows=1179 loops=1)
    Index Cond: (updated > '2017-04-14 05:27:51.039'::timestamp without time zone)
  Planning time: 0.102 ms
  Execution time: 0.720 ms
Run Code Online (Sandbox Code Playgroud)

但是运行相同的查询但使用不同的日期过滤器 '2016-04-14 05:27:51.039' 显示 postgres 将使用 seq scan 运行查询:

explain analyze select * from tbl t where updated > '2016-04-14 05:27:51.039';
                                                      QUERY PLAN                                                       
-----------------------------------------------------------------------------------------------------------------------
 Seq Scan …
Run Code Online (Sandbox Code Playgroud)

postgresql explain sql-execution-plan

2
推荐指数
1
解决办法
2630
查看次数

使用IN vs NOT IN时Postgresql的巨大性能差异

我有2张桌子,"transaksi"和"buku"."transaksi"有大约250k行,buku大约有170k行.两个表都有名为"k999a"的列,两个表都不使用索引.现在我检查这两个陈述.

声明1:

explain select k999a from transaksi where k999a not in (select k999a from buku);
Run Code Online (Sandbox Code Playgroud)

声明1输出:

 Seq Scan on transaksi  (cost=0.00..721109017.46 rows=125426 width=9)
   Filter: (NOT (SubPlan 1))
   SubPlan 1
     ->  Materialize  (cost=0.00..5321.60 rows=171040 width=8)
           ->  Seq Scan on buku  (cost=0.00..3797.40 rows=171040 width=8)
Run Code Online (Sandbox Code Playgroud)

声明2:

explain select k999a from transaksi where k999a in (select k999a from buku);
Run Code Online (Sandbox Code Playgroud)

声明2输出:

Hash Semi Join  (cost=6604.40..22664.82 rows=250853 width=9)
   Hash Cond: (transaksi.k999a = buku.k999a)
   ->  Seq Scan on transaksi  (cost=0.00..6356.53 rows=250853 width=9)
   ->  Hash  (cost=3797.40..3797.40 rows=171040 width=8) …
Run Code Online (Sandbox Code Playgroud)

postgresql explain sql-execution-plan

2
推荐指数
1
解决办法
520
查看次数

当我们使用Unique索引而不是非Unique索引时,性能有什么提升吗?

我知道如果数据是唯一的,理论上唯一索引会比非唯一索引更快。

因为唯一索引能够提供更多的信息,让查询优化器选择更有效的执行计划。

我正在做一些测试,想证明唯一索引可能比执行计划中的非唯一索引更好,但结果显示它们是相同的......

CREATE TABLE T3(
    ID INT NOT NULL,
    val INT NOT NULL,
    col1 UUID NOT NULL,
    col2 UUID NOT NULL,
    col3 UUID NOT NULL,
    col4 UUID NOT NULL,
    col5 UUID NOT NULL,
    col6 UUID NOT NULL
);

CREATE INDEX IX_ID_T3 ON T3 (ID);
CREATE UNIQUE INDEX UIX_ID_T3 ON T3 (ID);

INSERT INTO T3
SELECT i,
       RANDOM() * 1000000,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid,
       md5(random()::text || clock_timestamp()::text)::uuid
FROM generate_series(1,1000000) …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing unique-index sql-execution-plan

2
推荐指数
1
解决办法
2290
查看次数

如何减少MS SQL执行计划中的"执行次数"

有谁知道如何减少在MS SQL Server中SQL查询的执行计划中可以看到的"执行次数"?

我们有一个在一个生产服务器上运行缓慢的查询(其他都很好).检查执行计划时,我们发现其中一个步骤是聚集索引扫描.在运行正常的服务器上,此扫描执行一次.在运行缓慢的那个上,执行4次.

我们在这里阅读(http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p2.aspx)您应该尝试减少它,但我们找不到有关如何执行此操作的任何提示.

两台服务器都运行相同版本的Windows(2003)和SQL Server(2000).

任何帮助,将不胜感激.

sql sql-server sql-execution-plan

1
推荐指数
1
解决办法
5274
查看次数

分析ORACLE EXPLAIN PLAN

浏览器在生成jasper报告[PDF格式]时被绞死,该报告运行查询,其解释计划如下.

请帮忙分析查询,这个查询花了太多时间吗?我们还注意到在生成此报告时卡住了线程.

解释报告查询的计划

oracle performance query-optimization explain sql-execution-plan

1
推荐指数
1
解决办法
1026
查看次数