• 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

  • 相关阅读:
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    Oracle中如何插入特殊字符: & 和 ' (多种解决方案)
    oracle学习链接
    ORACLE中的游标Cursor总结
    SVN使用教程总结
    SVN使用教程之-分支/标记 合并 subeclipse
    weblogic启动 web应用ssh关闭 nohup命令
    Oracle 学习之:ASCII,CHR函数的作用和用法
    Oracle数据库单表循环提取输出
    设计模式-七大原则
  • 原文地址:https://www.cnblogs.com/neozhu/p/1590592.html
Copyright © 2020-2023  润新知