为什么Oracle DB上的XML插入需要很长时间?

时间:2013-02-01 15:05:57

标签: c# .net oracle ado.net insert-update

我在具有以下架构的表中插入了许多行:

TABLE "SPACE"."WORKTABLE" 
   (    "ID" NUMBER, 
    "AUTHOR" VARCHAR2(20 BYTE), 
    "INSERTION_DATE" DATE, 
    "XML_DOCUMENT" "SYS"."XMLTYPE" 
   )

使用ADO.NET(OracleXmlType)完成插入。 第一个插入的行需要两分多钟才能完成;但在完成此插入后,以下所有内容所花费的时间远远少于第一次。

  1. 为什么会这样?
  2. 这只与插入XML时进行的XML解析有关吗?为什么(如果是)它只在第一次插入时发生?
  3. 这次可以减少吗?
  4. (如果可能,请记录您的答案)

    更新: 正在执行的代码是一个简单的插入,最多包含10行,长度为5500字符的XML。此外,我已经把连接打开所花费的时间作为延迟的原因。

    string sql = "INSERT INTO WORKTABLE VALUES ( " + rowID + ",'JBALVIN',1,'01-JAN-12',:xmldocument)";
    using (OracleCommand comm = new OracleCommand(sql, con))
    {
        comm.Parameters.Add(":xmldocument", OracleDbType.XmlType);
        OracleXmlType xmlType = new OracleXmlType(con, entidadXML);
        comm.Parameters[0].Value = xmlType;
        comm.ExecuteNonQuery();
    }
    

    更新:

    我们注意到导致延迟的行是OracleXmlType xmlType = new OracleXmlType(con, entidadXML);。可以通过阻止Oracle检查XML有效性来解决吗?如果是这样......怎么办?通过使用连接的直接命令?

1 个答案:

答案 0 :(得分:0)

嗯...经过一些猜测和谷歌搜索后,我发现如果删除了XML上使用的架构的URL(属性xmlns:xsixsi:noNamespaceSchemaLocation),则按顺序完成插入毫秒。遗憾的是,Oracle OracleXmlType documentation没有记录这种行为。