`
longflang
  • 浏览: 64113 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SQL 语句调优_SQL传递参数的数据类型与表索引字段类型保持一致

阅读更多

SQL 语句调优_SQL传递参数的数据类型与表索引字段类型保持一致

 

今天在一个生产数据库上发现了一个TOP SQLSQL本身很简单,但COST非常大(执行计划走了全表扫描),SQL语句如下:

SELECT D.FIELD_VALUE, D.FIELD_VALUE_CLOB FROM RUNLOG_RUN_REC_DETAIL D WHERE D.RUN_RECORD_ID =:B2 AND D.FIELD_NUMBER=:B1

     这个表在字段"RUN_RECORD_ID"上建立了索引,但为什么没有使用到索引呢?

 

 

一. 原因

 传递参数时,类型与数据库表的字段类型不同(表字段类型为字符型),这样就会产生数据类型转换,ORACLE无法使用到索引,走了TABLE ACCESS FULL,导致get buffer过多,cpu cost也过多:

Object Type TABLE

Order 1

Rows 1

Size (KB) 0.052

Cost 7,328

Time 88

CPU Cost 804,127,446

I/O Cost 7,286

 

二. 解决方法

1. 修改SQL 语句,建议:

SELECT D.FIELD_VALUE, D.FIELD_VALUE_CLOB FROM PROD_RUNLOG_RUN_REC_DETAIL D WHERE TO_NUMBER(D.RUN_RECORD_ID) =:B2 AND D.FIELD_NUMBER=:B1 ;

 

2. 修改传递参数的类型为字符型

:B2='2007' 而不是 :B2=2007

SELECT D.FIELD_VALUE, D.FIELD_VALUE_CLOB FROM PROD_RUNLOG_RUN_REC_DETAIL D WHERE TO_NUMBER(D.RUN_RECORD_ID) =:B2 AND D.FIELD_NUMBER=:B1 ;

 

3. 修改该表的其中一个索引(推荐)

DROP INDEX SCDC.RUN_RECORD_ID;

CREATE INDEX SCDC.RUN_RECORD_ID ON TABLE SCDC.PROD_RUNLOG_RUN_REC_DETAIL(TO_NUMBER(RUN_RECORD_ID),FIELD_NUMBER);

 

 

.结论

    SQL传递参数与表索引字段类型不一致的时候,ORACLE将自动进行数据类型转换,这时就不会使用到索引,而是使用全表扫描,从而导致了CPUI/O都开销很大。笔者已经遇到了多次这样的问题,今天写出来,希望对大家有所帮助。

 

 

转自:http://space.itpub.net/32980/viewspace-676870

分享到:
评论

相关推荐

    达梦数据库_SQL语言手册

    达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...

    经典SQL语句大全

    因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top 10 * form table...

    Oracle实验二-SQL语句综合应用

    1.创建一个表person,包括字段有姓名、性别、出生日期、工作和家庭地址。 2.为表person增加email列,观察是否增加了email列;然后删除email列。 3.基于person表创建简单视图,并在姓名列创建索引。 4.为person表增加...

    常用SQL 语句大全

    第一部分、 基础 1、创建数据库 ...14:查询某一个表的字段和数据类型 15:不同服务器数据库之间的数据操作 SQL Server基本函数 SQLServer2000同步复制技术实现步骤 一、 预备工作 二、 正式配置

    Mysql面试过关!(详解:索引+常用引擎+常见问题+sql调优)

    3.5 参数类型与字段类型不匹配,导致类型发生了隐式转换,索引失效 3.6 查询条件使用or关键字,其中一个字段没有创建索引,则会导致整个查询语句索引失效; or两边为“>”和“<”范围查询时,索引失效 3.7 两列数据...

    Sql2008_全文索引详解

    如在文章内容字段里用lik e 语句搜索一个关键字, 当数据表里的内容很多时,这个时间可能会让人难以忍受。 在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数 据的速度,在本章里,将会...

    修改SQL数据库排序规则修改表栏位排序规则

    2.5-删除索引 (含对应的sql语句) 3-修改排序规则 (含对应的sql语句) 4-生成主鍵 (含对应的sql语句) 5-生成外鍵 (含对应的sql语句) 6-生成索引 (含对应的sql语句) 7-执行对应的sql语句及导出 或 不...

    基于索引的SQL语句优化之降龙十八掌

    对于满足以上条件的这些表,必须重点关注,因为在这些表上的索引,将对SQL语句的性能产生举足轻重的影响。不过下面还是总结了一下降龙十八掌内功的入门基础,建立索引常用的规则如下: 1、表的主键、外键必须有索引...

    MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法总结

    主要介绍了MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法,总结分析了MySQL建表、编码设置、字段添加、索引操作所涉及的SQL语句,需要的朋友可以参考下

    数据库比较工具(比较两个数据库的差异,含:表、字段字段长度等)

    了表,或少了字段,或字段类型长度不一样,或索引 不一样, 或存储过程,视图,触发器,默认值等不一样,就产生 相应的S QL语句! 二.操作方法: 先把源数据库的连接属性(数据库名,服务器名, 用户名, 密码)填好,按读源数据,...

    SQLSserver2008 上

    14、利用T-SQL语句修改表 ? 15、利用T-SQL语句插入记录 ? 16、设置字段是否允许Null ? 17、利用Update语句更新表中记录 ? 18、利用Update语句更新表中记录2 ? 18、利用Update语句更新表中记录3 ? 19、利用...

    sql试 题答案和试题

    3、 在table1数据表中增加“No_id”字段,数据类型char(12),不可空,并将其设定为UNIQUE约束,写出其命令语句。 六、 编程填空题:(10分) 填写出下列触发器中缺少的要害字,使下面语句完整: if update(...

    精通sql结构化查询语句

    1.5.1 SQL环境介绍 1.5.2 SQL的层次结构 1.5.3 SQL环境中的对象 1.5.4 SQL环境中的程序系统 1.6 SQL语句基础 1.6.1 SQL常量 1.6.2 SQL表达式 1.6.3 SQL数据类型 1.6.4 注释符 1.6.5 批处理 1.6.6 SQL语句的执行 ...

    经典全面的SQL语句大全

    经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用。  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制...

    程序员的SQL金典.rar

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    程序员的SQL金典4-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    查询完整的数据字典的SQL语句

    本语句包括了表、字段、字段类型、字段长度、是否为空、是否递增字段、索引名称、索引的定位、索引类型、主键、 外键等;通过合理的裁剪可以很方便的生成相应的数据字典。

    ACCESS中使用SQL语句

    ACCESS中使用SQL语句应注意的地方及几点技巧  Create Unique Index iName ON Tab1 (Name);  完成后ACCESS中字段Name索引属性显示为 - 有(无重复).  下面的语句删除刚才建立的两个索引  Drop Index iDate ...

    建表规范丶SQL规范丶索引规范-word文档

    本Word文档旨在提供关于建表规范、SQL规范以及索引规范的详细指导,帮助数据库管理员和开发人员更有效地进行数据库设计、SQL语句编写以及索引优化,提升数据库的性能和可维护性。 二、建表规范 表名规范:表名应...

Global site tag (gtag.js) - Google Analytics