Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 ROWID用于筛选列的伪列: CREATE OR REPLACE PROCEDURE DEL_OBS( cuantos number ) IS BEGIN DELETE FROM OBSERVATIONS WHERE ROWID IN ( SELECT rid FROM ( SELECT ROWID AS rid FROM observations ORDER BY DBMS_RANDOM.VALUE ) WHERE ROWNUM < cuantos ); END del_obs;_Sql_Oracle_Query Optimization - Fatal编程技术网

Sql ROWID用于筛选列的伪列: CREATE OR REPLACE PROCEDURE DEL_OBS( cuantos number ) IS BEGIN DELETE FROM OBSERVATIONS WHERE ROWID IN ( SELECT rid FROM ( SELECT ROWID AS rid FROM observations ORDER BY DBMS_RANDOM.VALUE ) WHERE ROWNUM < cuantos ); END del_obs;

Sql ROWID用于筛选列的伪列: CREATE OR REPLACE PROCEDURE DEL_OBS( cuantos number ) IS BEGIN DELETE FROM OBSERVATIONS WHERE ROWID IN ( SELECT rid FROM ( SELECT ROWID AS rid FROM observations ORDER BY DBMS_RANDOM.VALUE ) WHERE ROWNUM < cuantos ); END del_obs;,sql,oracle,query-optimization,Sql,Oracle,Query Optimization,使用索引查询3: DELETE FROM table_name WHERE ROWID IN ( SELECT rid FROM ( SELECT ROWID AS rid FROM table_name ORDER BY DBMS_RANDOM.VALUE ) WHERE ROWNUM <= 10000 ) 问题是,你想做什么?为什么要删除记录的随机子集?@APC这不是我的代码,我只是想改进它的执行优化意味着更高效地产生相同的结果。当我们

使用索引查询3

DELETE FROM table_name
WHERE ROWID IN (
  SELECT rid
  FROM   (
    SELECT ROWID AS rid
    FROM   table_name
    ORDER BY DBMS_RANDOM.VALUE
  )
  WHERE ROWNUM <= 10000
)

问题是,你想做什么?为什么要删除记录的随机子集?@APC这不是我的代码,我只是想改进它的执行优化意味着更高效地产生相同的结果。当我们不理解原始代码应该做什么时,IP很难做到这一点。代码本身就很慢。如果您无法重写它,则无法使其更快(因为访问路径是主键)。因此,您需要回到为您设置此任务的人那里,并解释不重写代码就不可能提高代码的性能。数据库是引擎,更像是机械设备,而不是一袋魔豆。唯一的其他选择是:(1)先删除大部分数据,这样剩余的数据集会更小,随机排序会更快,(2)向服务器添加更多的RAM,并增加缓冲池以容纳整个表,无论它有多大,(3)升级到更强大的服务器,具有更高的CPU和I/O性能。问题是,你想做什么?为什么要删除记录的随机子集?@APC这不是我的代码,我只是想改进它的执行优化意味着更高效地产生相同的结果。当我们不理解原始代码应该做什么时,IP很难做到这一点。代码本身就很慢。如果您无法重写它,则无法使其更快(因为访问路径是主键)。因此,您需要回到为您设置此任务的人那里,并解释不重写代码就不可能提高代码的性能。数据库是引擎,更像是机械设备,而不是一袋魔豆。唯一的其他选择是:(1)先删除大部分数据,这样剩余的数据集会更小,随机排序会更快,(2)向服务器添加更多的RAM,并增加缓冲池以容纳整个表,无论它有多大,(3)升级到更强大的服务器,具有更高的CPU和I/O性能。感谢您的提示,但我无法更改查询,这是一个给定的代码,我们不允许接触。我们只能添加外部改进,使用索引或更改PCTFREE和PCTUSED…感谢您的提示,但我无法更改查询,这是我们不允许接触的给定代码。我们只能添加外部改进,使用索引或更改PCTFREE和PCTUSED…感谢您的帮助,但我无法更改代码,只能在事后进行改进:感谢您的帮助,但我无法更改代码,只能在事后进行改进:我会尝试,但到目前为止,我不明白该索引有何帮助,如果该索引是由DBMS创建的(nplate和odatetime是观察的PK,很抱歉我没有这么说),那么该索引已经存在了。您可以通过显示表的DDL脚本轻松地验证这一点。我会尝试一下,但现在我不明白该索引有什么帮助,如果该索引是由DBMS创建的(nplate和odatetime是观察结果的PK,很抱歉我没有这么说),那么该索引已经存在。您可以通过显示表的DDL脚本轻松验证这一点。
 CREATE INDEX cuantos ON OBSERVATIONS(nplate, odatetime);
CREATE OR REPLACE PROCEDURE DEL_OBS(cuantos number) IS
begin

   DELETE OBSERVATIONS  FROM OBSERVATIONS 
   join (select * from  OBSERVATIONS ORDER BY VALUE ) as i on
            nplate=i.nplate AND 
            odatetime=i.odatetime  AND 
            i.ROWNUM<=cuantos;
End DEL_OBS;
SELECT * FROM (
  SELECT * 
  FROM observations 
  ORDER BY DBMS_RANDOM.VALUE)
  WHERE ROWNUM<=cuantos;
AND rowid IN 
   ( SELECT obs_sample.rowid 
     FROM observations sample (0.05) obs_sample)
FROM observations
FROM observations SAMPLE (0.05)
CREATE OR REPLACE PROCEDURE DEL_OBS(
  cuantos number
)
IS
BEGIN
  DELETE FROM OBSERVATIONS
  WHERE ROWID IN (
    SELECT rid
    FROM   (
      SELECT ROWID AS rid
      FROM   observations
      ORDER BY DBMS_RANDOM.VALUE
    )
    WHERE ROWNUM < cuantos
  );
END del_obs;
CREATE TABLE table_name ( id ) AS
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 50000;
DELETE FROM table_name
WHERE ROWID IN (
  SELECT rid
  FROM   (
    SELECT ROWID AS rid
    FROM   table_name
    ORDER BY DBMS_RANDOM.VALUE
  )
  WHERE ROWNUM <= 10000
)
----------------------------------------------------------------------------------------
| Id  | Operation                      | Name       | Rows  | Bytes  | Cost | Time     |
----------------------------------------------------------------------------------------
|   0 | DELETE STATEMENT               |            |     1 |     24 |  123 | 00:00:02 |
|   1 |   DELETE                       | TABLE_NAME |       |        |      |          |
|   2 |    NESTED LOOPS                |            |     1 |     24 |  123 | 00:00:02 |
|   3 |     VIEW                       | VW_NSO_1   | 10000 | 120000 |  121 | 00:00:02 |
|   4 |      SORT UNIQUE               |            |     1 | 120000 |      |          |
| * 5 |       COUNT STOPKEY            |            |       |        |      |          |
|   6 |        VIEW                    |            | 19974 | 239688 |  121 | 00:00:02 |
| * 7 |         SORT ORDER BY STOPKEY  |            | 19974 | 239688 |  121 | 00:00:02 |
|   8 |          TABLE ACCESS FULL     | TABLE_NAME | 19974 | 239688 |   25 | 00:00:01 |
|   9 |     TABLE ACCESS BY USER ROWID | TABLE_NAME |     1 |     12 |    1 | 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
------------------------------------------
* 5 - filter(ROWNUM<=10000)
* 7 - filter(ROWNUM<=10000)
ALTER TABLE table_name ADD CONSTRAINT tn__id__pk PRIMARY KEY ( id )
DELETE FROM table_name
WHERE ROWID IN (
  SELECT rid
  FROM   (
    SELECT ROWID AS rid
    FROM   table_name
    ORDER BY DBMS_RANDOM.VALUE
  )
  WHERE ROWNUM <= 10000
)
---------------------------------------------------------------------------------------
| Id  | Operation                      | Name       | Rows | Bytes  | Cost | Time     |
---------------------------------------------------------------------------------------
|   0 | DELETE STATEMENT               |            |    1 |     37 |   13 | 00:00:01 |
|   1 |   DELETE                       | TABLE_NAME |      |        |      |          |
|   2 |    NESTED LOOPS                |            |    1 |     37 |   13 | 00:00:01 |
|   3 |     VIEW                       | VW_NSO_1   | 9968 | 119616 |   11 | 00:00:01 |
|   4 |      SORT UNIQUE               |            |    1 | 119616 |      |          |
| * 5 |       COUNT STOPKEY            |            |      |        |      |          |
|   6 |        VIEW                    |            | 9968 | 119616 |   11 | 00:00:01 |
| * 7 |         SORT ORDER BY STOPKEY  |            | 9968 | 119616 |   11 | 00:00:01 |
|   8 |          INDEX FAST FULL SCAN  | TN__ID__PK | 9968 | 119616 |    9 | 00:00:01 |
|   9 |     TABLE ACCESS BY USER ROWID | TABLE_NAME |    1 |     25 |    1 | 00:00:01 |
---------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
------------------------------------------
* 5 - filter(ROWNUM<=10000)
* 7 - filter(ROWNUM<=10000)
CREATE OR REPLACE PROCEDURE DEL_OBS(cuantos number)
IS
  TYPE obs_tab IS TABLE OF observations%ROWTYPE;
begin
  SELECT *
  BULK COLLECT INTO obs_tab
  FROM   (
    SELECT * FROM observations ORDER BY DBMS_RANDOM.VALUE
  )
  WHERE ROWNUM<=cuantos;

  FORALL i IN 1 .. obs_tab.COUNT
    DELETE FROM OBSERVATIONS
    WHERE  nplate    = obs_tab(i).nplate
    AND    odatetime = obs_tab(i).odatetime; 
END del_obs;