Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle中间联接表大小_Sql_Oracle_Join_Performance - Fatal编程技术网

Sql Oracle中间联接表大小

Sql Oracle中间联接表大小,sql,oracle,join,performance,Sql,Oracle,Join,Performance,当我们连接两个以上的表时,oracle或任何数据库都会决定连接两个表,并使用结果连接后续的表。是否有方法确定中间联接大小。我对甲骨文特别感兴趣。我知道的一个解决方案是在sqldeveloper中使用Autotrace,它具有LAST\u OUTPUT\u ROWS列。但是对于pl/sql和其他方式执行的查询,oracle是否在某个表中记录了中间联接大小 我问这个问题是因为最近我们遇到了一个问题,因为有人删除了统计数据,无法重新生成它。当跟踪到整个过程时,我们发现oracle在得到6行的最终结果之

当我们连接两个以上的表时,oracle或任何数据库都会决定连接两个表,并使用结果连接后续的表。是否有方法确定中间联接大小。我对甲骨文特别感兴趣。我知道的一个解决方案是在sqldeveloper中使用Autotrace,它具有LAST\u OUTPUT\u ROWS列。但是对于pl/sql和其他方式执行的查询,oracle是否在某个表中记录了中间联接大小


我问这个问题是因为最近我们遇到了一个问题,因为有人删除了统计数据,无法重新生成它。当跟踪到整个过程时,我们发现oracle在得到6行的最终结果之前形成了一个1.8亿行的中间表,查询速度非常慢。

oracle可以具体化表联接到会话的临时段集中

由于它是一个一次性表,在查询完成后将被删除,因此不会存储其统计信息

但是,您可以通过构建查询计划并查看相应操作的
参数来估计其大小:

EXPLAIN PLAN FOR
WITH    q AS
        (
        SELECT  /*+ MATERIALIZE */
                e1.value AS val1, e2.value AS val2
        FROM    t_even e1, t_even e2
        )
SELECT  COUNT(*)
FROM    q

SELECT  *
FROM    TABLE(DBMS_XPLAN.display())

Plan hash value: 3705384459

---------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |                            |     1 |       |    43G  (5)|999:59:59 |
|   1 |  TEMP TABLE TRANSFORMATION |                            |       |       |            |          |
|   2 |   LOAD AS SELECT           |                            |       |       |            |          |
|   3 |    MERGE JOIN CARTESIAN    |                            |   100T|   909T|    42G  (3)|999:59:59 |
|   4 |     TABLE ACCESS FULL      | T_ODD                      |    10M|    47M|  4206   (3)| 00:00:51 |
|   5 |     BUFFER SORT            |                            |    10M|    47M|    42G  (3)|999:59:59 |
|   6 |      TABLE ACCESS FULL     | T_ODD                      |    10M|    47M|  4204   (3)| 00:00:51 |
|   7 |   SORT AGGREGATE           |                            |     1 |       |            |          |
|   8 |    VIEW                    |                            |   100T|       |  1729M (62)|999:59:59 |
|   9 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6604_2660595 |   100T|   909T|  1729M (62)|999:59:59 |
---------------------------------------------------------------------------------------------------------
这里,物化的表被称为
SYS\u TEMP\u 0FD9D6604\u 2660595
,估计的记录计数为
100T
1000000000000
记录)