Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
如何在Oracle中提高connect by查询的性能_Oracle_Query Performance_Connect By - Fatal编程技术网

如何在Oracle中提高connect by查询的性能

如何在Oracle中提高connect by查询的性能,oracle,query-performance,connect-by,Oracle,Query Performance,Connect By,我有下面的connect by查询,在我的表\u名称中记录计数为500大约需要50到60秒 请你们中的任何一位提出一种更好的方法来编写这个查询,以提高性能 SELECT DISTINCT REGEXP_SUBSTR(STD_DEP,'[^,]+', 1, LEVEL) AS DEP_STD_ID FROM my_table_name WHERE std_id = 242 CONNECT BY REGEXP_SUBSTR(STD_DEP,'[^,]+', 1, LEVEL) IS NOT NU

我有下面的connect by查询,在我的表\u名称中记录计数为500大约需要50到60秒

请你们中的任何一位提出一种更好的方法来编写这个查询,以提高性能

SELECT DISTINCT REGEXP_SUBSTR(STD_DEP,'[^,]+', 1, LEVEL) AS DEP_STD_ID
FROM my_table_name
WHERE std_id = 242
  CONNECT BY REGEXP_SUBSTR(STD_DEP,'[^,]+', 1, LEVEL) IS NOT NULL;
在上面的查询中:STD_DEP是一个逗号分隔的字段,它将包含所有从属STD_id。

在Oracle中需要拆分分隔字符串

不使用正则表达式的是:

WITH bounds ( id, list, start_pos, end_pos, lvl ) AS (
  SELECT id, list, 1, INSTR( list, ',' ), 1
  FROM   my_table_name
  WHERE  std_id = 242
UNION ALL
  SELECT id,
         list,
         end_pos + 1,
         INSTR( list, ',', end_pos + 1 ),
         lvl + 1
  FROM   bounds
  WHERE  end_pos > 0
)
SELECT id,
       SUBSTR(
         list,
         start_pos,
         DECODE( end_pos, 0, LENGTH( list ) + 1, end_pos ) - start_pos
       ) AS item,
      lvl
FROM   bounds
ORDER BY id, lvl;

我看不出你想问什么。尝试包含表DDL、样本数据和样本输出。请参见此处->