`

索引失效(转)

阅读更多
数据库使用:隐式转换-》索引失效-》严重性能问题
程序中使用隐式转换是一个很不好的编程习惯,不仅不能客观反应出数据库如何真正地处理数据,而且还会带来一些隐藏的性能问题,下面就是一个示例,说明varchar2与number之间隐式转换导致索引失效,最终导致可以使用索引的地方使用全表扫描,带来严重的性能问题…
下面做个小试验:
SQL> set autotrace on explain   <---打开执行计划监控
SQL> create table t ( id varchar2(20));
Table created.
Elapsed: 00:00:00.04
SQL> begin       <---向表中填入2000000条数据
  2  for i in 1 .. 2000000 loop
  3  insert into t values(i);
  4  end loop
  5  ;
  6  commit;
  7  end;
  8  /
PL/SQL procedure successfully completed.
Elapsed: 00:03:35.33
SQL> select count(*) from t;
  COUNT(*)
----------
   2000000
Elapsed: 00:00:00.08
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=811 Card=1)
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF 'T' (TABLE) (Cost=811 Card=176780
          7)
SQL> create index id_ind on t( id); <--在Id列上建一个索引
Index created.
Elapsed: 00:00:26.74
SQL> select * from t where id = '200'; <---用字符串查,可以使用到索引(请看执行计划)。
ID
--------------------
200
Elapsed: 00:00:00.01 <---根据索引,只用了00.01秒
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=1 Bytes=12)
   1    0   INDEX (RANGE SCAN) OF 'ID_IND' (INDEX) (Cost=3 Card=1 Byte
          s=12)
从执行计划中可以看出,cost只要3
SQL> select * from t where id = 200; <----如果直接根据数字查,由于发生了隐式转换,执行计划为全表扫描。
ID
--------------------
200
Elapsed: 00:00:00.48 <---全表扫描,是索引扫描时间的48倍!!
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=881 Card=38 Bytes=
          456)
   1    0   TABLE ACCESS (FULL) OF 'T' (TABLE) (Cost=881 Card=38 Bytes
          =456)
分享到:
评论

相关推荐

    sql学习 索引逻辑失效_尽量要避免列的类型转换.sql

    sql学习 索引逻辑失效_尽量要避免列的类型转换.sql

    Mysql 5.6 隐式转换导致的索引失效和数据不准确的问题

    这个varchar字段有一个复合索引。其中的总条数有58989,甚至不加单引号查出来的数据不是我们想要的数据。 使用的是mysql 5.6版本,innoDB引擎 实际情况如下 下面我们来看一下执行的结果 在上面的描述中我们还得...

    MySql数据库优化之SQL和索引的优化

    2 索引失效 2.1like后面的通配符在前面,索引会失效。 2.2 没有使用联合索引的第一列,not in,!=,使用MySQL函数,类型转换,or等都无法用到索引。 3 SQL和索引的优化 3.1 慢查询日志 3.2 查磁盘的I/O读写的数据量 ...

    MySQL Like模糊查询速度太慢如何解决

     1、like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。  2、like keyword% 索引有效。  3、like %keyword% 索引失效,也无法使用...

    利用MYSQLDUMPSLOW进行慢日志分析

    mysqldumpslow是一个用...特别是对于存在大量并发事务的OLTP系统,开启慢日志功能对系统整体性能来讲将是一个沉重的负担,特别是在某些索引失效或者数据表存储物理变更时将会导致恶性循环,严重时可能会导致系统崩溃。

    Oracle课件.pdf

    4.4 索引失效 5.表空间 6.表分区 6.1表空间及分区表的概念 6.2表分区的具体作用 6.3.表分区的优缺点 6.4表分区的几种类型及操作方法 6.5有关表分区的一些维护性操作 第5章 PL/SQL程序设计 1. PL/SQL简介 ...

    MySQL中exists关键字和in的区别有那些? SQL语句优化有那些方法? 查询速度很慢应该怎么办?

    一、exists和in有何区别如下...在索引列上用NOT,等非操作符会导致索引失效,数据库管理系统是不会使用索引的,可以将查询语句转换为可以使用索引的查询。  2. 避免对查询列的操作。任何对查询列的操作都有可能导致全表

    大数据高频面试题.pdf

    Spark优先把数据放到内存中,如果内存放不下,就会放到磁盘⾥⾯,程序进⾏⾃动的存储切换 2) 基于⾎统的⾼效容错机制 在RDD进⾏转换和动作的时候,会形成RDD的Lineage依赖链,当某⼀个RDD失效的时候,可以通过重新...

    C++ Primer第四版【中文高清扫描版】.pdf

    9.2.2 使迭代器失效的容器操作 271 9.3 顺序容器的操作 272 9.3.1 容器定义的类型别名 272 9.3.2 begin和end成员 273 9.3.3 在顺序容器中添加元素 273 9.3.4 关系操作符 277 9.3.5 容器大小的操作 278 9.3.6 访问...

    DM8_SQL语言使用手册.pdf

    目录 第 1 章 结构化查询语言 DM_SQL 简介 ....................................................................1 1.1 DM_SQL 语言的特点 .............3.4.5 表空间失效文件恢复准备 ................................

    BBSXP青年人美化版

    用户密码全部采用 MD5 方式加密,但同时兼容老版本,所以无需数据转换 32.Email 地址全部 code 化,让那些扫描页面中 Email 的软件彻底失效 33.增加超级公告功能,将会更加引人注意,不让公告成为无用的摆设...

    易语言程序免安装版下载

    查找表项()”增加可空参数“列索引”,以指定查找哪一列。 12. 修改扩展界面支持库一,添加“工具条.置标题()”方法。 13. 修改高级表格支持库在表格空白处(所有单元格之外)单击鼠标导致当前光标处单元格自动...

    JavaScript笔记

    强调:一旦定义src属性则其中的代码失效 解释执行:语句也可以直接写在js文件中,边解释边执行 3.***调试*** |--①.只有在执行时,才会报错 |--②.错误信息,浏览器页面看不到--没效果 | 解决:控制台--...

    基于ApacheNutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件nutch-htmlunit.zip

    Nutch Htmlunit Plugin 重要说明: ... 12306 Hunter - (功能已失效不可用,不过还可以当作Swing开发样列参考只用)Java Swing C/S版本12306订票助手,用处你懂的 标签:nutch

    精易模块[源码] V5.15

    4、修正“IP_10进制转IP”与“IP_16进制转IP”命令反向的问题,感谢易友[@humanbean ]反馈。 5、改善“网页_访问”死循环代码,感谢易友[@67564226]反馈。 6、优化“文本_取随机数字”精简代码,提高执行效率,感谢...

    jQuery-Draggable-Touch:DraggableDroppable jQuery UI 翻版,适用于手机和平板电脑

    jQuery-Draggable-Touch 可拖放/可拖放的翻版,适用于移动设备和平板电脑。 使用 translateX/Y 而...索引 可丢弃 活动类 悬停类 接受 支持 苹果浏览器 Chrome合金 安卓 4+ 功能不稳定 cursorAt 与轴 快速移动中的偏移

    Delphi开发技巧之-VCL

    为工具栏的TToolButton设置新的索引 仅通过Classname创建和管理任意窗体 从RichEdit取Rtf格式 从TListBox中拖放项目到TRichEdit 从一个TRichedit复制格式Rtf文本到其它 使用CustomSort方法排序TListView 使用DBGrid...

    ASP200问.EXE

    40.如何在Session对象失效后重新设置Session对象 41.如何创建、读写和删除Cookie 43.如何遍历Cookies集合 44.如何判断客户端的Cookie是否处于开启状态 45.如何使用Cookie记录用户访问信息 46.如何用Cookie实现仅弹出...

    MYSQL常用函数及解决方案(持续更新)

    一、MYSQL随机产生指定范围的字符串;...十一、设置/取消唯一索引; 十二、MYSQL事件失效; 十三、解决MYSQL表被锁住的问题; 十四、MYSQL日期函数大全; 十五、终止MYSQL存储过程; 十六、MYSQL存储过程

    精易官方免费模块v3.60版

    2.完善 类_ODBC数据库,“读文本”参数二的备注,改为 索引从0开始 感谢 阿蒙 的提醒 3.完善 类_ODBC数据库 ,“连接Access”增加参数 &lt;参数_Accdb&gt; 感谢 阿蒙 的代码 精易模块 V3.56 what’s new:(20131224) 1...

Global site tag (gtag.js) - Google Analytics