Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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 查询速度非常慢_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 查询速度非常慢

Sql 查询速度非常慢,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我对Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位版本的生产进行了此查询,该版本非常慢(在3.859秒内获取了50行),我不知道还需要做什么来优化它! t_操作只有12610行 CREATE OR REPLACE FORCE VIEW "IOT"."V_DEVICES_LIST" ( "PRODUCT", "DEVICE_LIST") AS select PRODUCT , RTRIM(XMLAGG(XMLELEMENT(E,

我对Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位版本的生产进行了此查询,该版本非常慢(在3.859秒内获取了50行),我不知道还需要做什么来优化它! t_操作只有12610行

CREATE OR REPLACE FORCE VIEW "IOT"."V_DEVICES_LIST" ( "PRODUCT", "DEVICE_LIST") AS 
select
  PRODUCT ,
  RTRIM(XMLAGG(XMLELEMENT(E, NAME,', ').EXTRACT('//text()')  ).GetClobVal(),',') AS DEVICE_LIST
from
   t_operation 
where   
   discriminator = 'ANDROID'  and product is not null 
group by
  PRODUCT;
解释计划:

EXPLAIN PLAN 
  SET statement_id = 'ex_plan1' FOR
 select
      PRODUCT ,
      RTRIM(XMLAGG(XMLELEMENT(E, NAME,', ').EXTRACT('//text()')  ).GetClobVal(),',') AS DEVICE_LIST
    from
       t_operation 
    where   
       discriminator = 'ANDROID'  and product is not null 
    group by
      PRODUCT;
结果:

Plan hash value: 795775875

----------------------------------------------------------------------------------
| Id  | Operation          | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |             | 11484 |   246K|    11  (19)| 00:00:01 |
|   1 |  SORT GROUP BY     |             | 11484 |   246K|    11  (19)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| T_OPERATION | 11992 |   257K|     9   (0)| 00:00:01 |
----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("PRODUCT" IS NOT NULL AND "DISCRIMINATOR"='ANDROID')

Note
-----
   - Unoptimized XML construct detected (enable XMLOptimizationCheck for more information)
和T_操作:

 CREATE TABLE "IOT"."T_OPERATION" 
   (    "ID" NUMBER(38,0) NOT NULL ENABLE, 
    "DISCRIMINATOR" VARCHAR2(50 BYTE) NOT NULL ENABLE, 
    "COUNTRY" NUMBER(38,0), 
    "NAME" VARCHAR2(255 BYTE) NOT NULL ENABLE, 
    "COMPUTER" NUMBER(38,0), 
    "PRODUCT" NUMBER(38,0), 
    "ADDRESS" NUMBER(38,0), 
     CONSTRAINT "PK_OPR_ID" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 655360 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "IOT"  ENABLE, 
     CONSTRAINT "FK_OPR2ADR_INF" FOREIGN KEY ("ADDRESS")
      REFERENCES "IOT"."T_ADDRESS_INFO" ("ID") ENABLE, 
     CONSTRAINT "FK_OPR2CTR" FOREIGN KEY ("COUNTRY")
      REFERENCES "IOT"."T_COUNTRY" ("ID") ENABLE, 
     CONSTRAINT "FK_OPR2PRD" FOREIGN KEY ("PRODUCT")
      REFERENCES "IOT"."T_TABLET" ("ID") ENABLE, 
     CONSTRAINT "FK_OPR2SRV" FOREIGN KEY ("COMPUTER")
      REFERENCES "IOT"."T_COMPUTER" ("ID") ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 2097152 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "IOT" ;

  CREATE INDEX "IOT"."V_DEVICES_LIST_3" ON "IOT"."T_OPERATION" (UPPER("NAME")) 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "IOT" ;

鉴别器
产品
列上放置索引:

create index i_operation_disc_prod on t_operation(discriminator, product);

假设
discriminator='ANDROID'
产生的行数少于表
t\u操作中行数的10%
discriminator
产品
列上建立索引:

create index i_operation_disc_prod on t_operation(discriminator, product);

假设
discriminator='ANDROID'
生成的行数少于表
t\u操作中行数的10%

我认为您不能。从表中检索数据的速度尽可能快,因为您的筛选器似乎不是很有选择性,所以可能适合进行完整的表扫描,添加索引也不太可能有帮助。不管怎样,数据量都会相对较快

正在聚合中花费的时间。我尝试使用XMLQuery而不是
extract()
(这是不推荐使用的),但速度较慢。我还尝试了一个用户定义的CLOB聚合器和
collect()
method(),它们也有点慢。当然,这是在我的系统和测试数据,我弥补;您的结果可能会有所不同,但这些替代方案似乎不会给您带来显著的收益

如果您的聚合名称列表超过4K(每个产品可能只包含17个名称),那么您就不能使用
listag()
,这大概就是您首先尝试使用XMLAgg的原因


不幸的是,您似乎不得不忍受XMLType和CLOB操作所带来的开销。

我认为您不能。从表中检索数据的速度尽可能快,因为您的筛选器似乎不是很有选择性,所以可能适合进行完整的表扫描,添加索引也不太可能有帮助。不管怎样,数据量都会相对较快

正在聚合中花费的时间。我尝试使用XMLQuery而不是
extract()
(这是不推荐使用的),但速度较慢。我还尝试了一个用户定义的CLOB聚合器和
collect()
method(),它们也有点慢。当然,这是在我的系统和测试数据,我弥补;您的结果可能会有所不同,但这些替代方案似乎不会给您带来显著的收益

如果您的聚合名称列表超过4K(每个产品可能只包含17个名称),那么您就不能使用
listag()
,这大概就是您首先尝试使用XMLAgg的原因


不幸的是,您似乎不得不忍受XMLType和CLOB操作所涉及的开销。

表有多大?“慢”有多慢?解释计划是什么样子的?此表上的统计数据是否已更新?是否有索引(正在使用)?您是否也可以从执行计划输出中添加谓词信息?显示
dbms\u xplan.display
显示的所有内容。您的表中有多少行具有ANDROID,其中有多少行具有非空产品?好吧,那么我认为这与访问无关(因此索引没有帮助-看起来您获得了绝大多数行,大约11k行/12k行),但XML创建和聚合速度较慢。我很快就使用了一个用户定义的聚合函数,但速度也很慢。只需要处理大量数据,CLOB(和类似的XMLTypes)似乎有很多开销。@MarkStewart-开销来自CLOB处理,而不是单个的255字节名。如果一个产品可以有16个名称,则需要CLOB,因为这些名称加上分隔符可能超过4096字节。使用Listag或其他varchar2聚合技术(名称很少/足够短,不会突破限制),速度很快;从我的测试来看,当你切换到CLOB时,速度会显著减慢。桌子有多大?“慢”有多慢?解释计划是什么样子的?此表上的统计数据是否已更新?是否有索引(正在使用)?您是否也可以从执行计划输出中添加谓词信息?显示
dbms\u xplan.display
显示的所有内容。您的表中有多少行具有ANDROID,其中有多少行具有非空产品?好吧,那么我认为这与访问无关(因此索引没有帮助-看起来您获得了绝大多数行,大约11k行/12k行),但XML创建和聚合速度较慢。我很快就使用了一个用户定义的聚合函数,但速度也很慢。只需要处理大量数据,CLOB(和类似的XMLTypes)似乎有很多开销。@MarkStewart-开销来自CLOB处理,而不是单个的255字节名。如果一个产品可以有16个名称,则需要CLOB,因为这些名称加上分隔符可能超过4096字节。使用Listag或其他varchar2聚合技术(名称很少/足够短,不会突破限制),速度很快;从我的测试来看,切换到CLOB时,速度明显减慢。我认为该索引改进了计划,执行也得到了改进。@MarkStewart-IOT似乎是架构和表空间的名称,而不是指示它实际上是一个索引组织的表,如果这是您的意思的话?哎哟@阿列克斯普尔:你是对的;我将编辑我的答案。我看到了物联网,我的思维扩展到了组织索引!我认为这个索引改进了计划,执行也得到了改进。@MarkStewart-IOT似乎是架构和表空间的名称,而不是表示它实际上是一个索引组织的表,如果这是你的意思的话?哎呀@阿列克斯普尔:你是对的;我将