• Oracle数据类型引起的性能问题(已经解决)!


    为避免SQL-注入,所有的update,insert,delete,select全部使用带参数的形式编写

    Update TableName Set FiledName=:Fd1 where Id=:Id

    ID Oracle类型是 Varchar2对应DbType.String

    问题来了,由于类型映射不匹配,导致在执行SQL时Oracle会自动转换类型,这样直接导致无法使用到索引(全部全表扫描),所以update,delete时效率特别差

    后修改代码

    ID Oracle类型是 Varchar2对应DbType.AnsiString

    问题解决了,可以用使用到索引。

    Oracle 数据类型

    要绑定为参数的 DbType 枚举

    要绑定为参数的 OracleType 枚举

    备注

    BFILE

    BFile

    Oracle 只允许将 BFILE 绑定为 BFILE 参数。 如果您尝试绑定一个非 BFILE 值(如 byte[]OracleBinary),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。

    BLOB

    Blob

    Oracle 只允许将 BLOB 绑定为 BLOB 参数。 如果您尝试绑定一个非 BLOB 值(如 byte[]OracleBinary),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。

    CHAR

    AnsiStringFixedLength

    Char

    CLOB

    Clob

    Oracle 只允许将 CLOB 绑定为 CLOB 参数。 如果您尝试绑定一个非 CLOB 值(如 System.StringOracleString),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。

    DATE

    DateTime

    DateTime

    FLOAT

    Single、Double、Decimal

    Float、Double、Number

    Size 确定 System.Data.DBTypeOracleType

    INTEGER

    SByte、Int16、Int32、Int64、Decimal

    SByte、Int16、Int32、Number

    Size 确定 System.Data.DBTypeOracleType

    INTERVAL YEAR TO MONTH

    Int32

    IntervalYearToMonth

    只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

    INTERVAL DAY TO SECOND

    Object

    IntervalDayToSecond

    只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

    LONG

    AnsiString

    LongVarChar

    LONG RAW

    Binary

    LongRaw

    NCHAR

    StringFixedLength

    NChar

    NCLOB

    NClob

    Oracle 只允许将 NCLOB 绑定为 NCLOB 参数。 如果您尝试绑定一个非 NCLOB 值(如System.StringOracleString),适用于 Oracle 的 NET 数据提供程序并不会自动为您构造这样的值。

    NUMBER

    VarNumeric

    Number

    NVARCHAR2

    String

    NVarChar

    RAW

    Binary

    Raw

    REF CURSOR

    Cursor

    有关更多信息,请参见Oracle REF CURSOR

    ROWID

    AnsiString

    Rowid

    TIMESTAMP

    DateTime

    Timestamp

    只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

    TIMESTAMP WITH LOCAL TIME ZONE

    DateTime

    TimestampLocal

    只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

    TIMESTAMP WITH TIME ZONE

    DateTime

    TimestampWithTz

    只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

    UNSIGNED INTEGER

    Byte、UInt16、UInt32、UInt64、Decimal

    Byte、UInt16、Uint32、Number

    Size 确定 System.Data.DBTypeOracleType

    VARCHAR2

    AnsiString

    VarChar

  • 相关阅读:
    配置java 环境变量(jdk)
    R语言的神奇之一--基于向量
    python绘制图形(Turtle模块)
    右键菜单中新建记事本选项丢失的解决办法
    在windows下远程访问linux服务器
    针对Chrome谷歌等浏览器不再支持showModalDialog的解决方案
    导入一个新项目需要注意的几大问题(jdk1.6+eclipse4.4+tomcat6)
    【漏洞公告】Tomcat信息泄漏和远程代码执行漏洞:CVE-2017-12615/CVE-2017-12616
    python基础篇10-py2和py3编码
    python基础篇03-range/for/break/continue/while/if
  • 原文地址:https://www.cnblogs.com/neozhu/p/1590592.html
Copyright © 2020-2023  润新知