zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    poj1703
    poj 2385
    poj 3169 差分约束
    poj3723 最大权森林
    POJ3255 次短路
    图论算法----最小生成树
    给linux操作系统安装中文环境
    Windows下使用python
    pku3668 Game of Lines
    pku3670 Eating Together
  • 原文地址:https://www.cnblogs.com/neozhu/p/1590592.html
Copyright © 2011-2022 走看看