========  测试表1信息   =======
SQL> select count(*) from tb_test;

COUNT(*)
----------
   3000000
  
SQL> select count(*) from tb_test where name='1' or name='0';

COUNT(*)
----------
   3000000

SQL> desc tb_test
 Name                       Null?    Type
 -------------------------- -------- -----------------
 ID                               NUMBER
 INC_DATETIME                       VARCHAR2(19)
 RANDOM_ID                           NUMBER
 RANDOM_STRING                       VARCHAR2(4000)
 NAME                             VARCHAR2(20)

===========  索引信息 ===========

OWNER   TABLE_NAME   INDEX_NAME    INDEX_TYPE
-------  ------------    -------------     ------------
TEST    TB_TEST      IDX_INC              NORMAL
TEST    TB_TEST      NAME_IX              NORMAL
TEST    TB_TEST      ID_IX               NORMAL

====== 测试表2信息 ==========

SQL> desc tb_test1
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 ID                                                           NUMBER
 INC_DATETIME                                                   VARCHAR2(19)
 RANDOM_ID                                                      NUMBER
 RANDOM_STRING                                                   VARCHAR2(4000)

SQL> select count(*) from tb_test1

COUNT(*)
----------
       110

============ 使用隐式转换  ============
使用隐式转换未使用索引,全表扫描,IO开销大,执行速度慢。

explain plan for select   id from tb_test where
id not in ( select id from tb_test1 ) and
RANDOM_STRING=0 and name=1;

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------
Plan hash value: 2850541703

----------------------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     1 |    26 |  2762   (1)| 00:00:34 |
|*  1 |  HASH JOIN ANTI NA |          |     1 |    26 |  2762   (1)| 00:00:34 |
|*  2 |   TABLE ACCESS FULL| TB_TEST  |     1 |    13 |  2758   (1)| 00:00:34 |
|   3 |   TABLE ACCESS FULL| TB_TEST1 |   110 |  1430 |     4   (0)| 00:00:01 |
-------------------------------------------------------------------------------

===============  使用显示转换 ==================
使用显示转换,索引扫描,IO开销小,执行快。

SQL> explain plan for select   id from tb_test where
  2  id not in ( select id from tb_test1 ) and
  3  RANDOM_STRING='0' and name='1';

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------
Plan hash value: 3484870784

-----------------------------------------------------------------------------------------
| Id  | Operation                    | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |          |     1 |    26 |     8   (0)| 00:00:01 |
|*  1 |  HASH JOIN ANTI NA           |          |     1 |    26 |     8   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS BY INDEX ROWID| TB_TEST  |     1 |    13 |     4   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | NAME_IX  |     6 |       |     3   (0)| 00:00:01 |
|   4 |   TABLE ACCESS FULL          | TB_TEST1 |   110 |  1430 |     4   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------

总结:1、隐式转换发生在字段列上时将使索引失效
     2、RANDOM_STRING和name虽含有大量重复值,使用索引的效率仍然很高。

sql优化_隐式-显示转换的更多相关文章

  1. Java数据类型的转换:隐式(自动)转换与强制转换

    原文链接:http://java.chinaitlab.com/base/725590.html 一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double ...

  2. 你不知道的JavaScript--Item3 隐式强制转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object. object是引用类型,其它的五种是基本类型或者是原始类型.我们 ...

  3. 深入js系列-类型(隐式强制转换)

    隐式强制转换 在其可控的情况下,减少冗余,让代码更简洁,很多地方都进行了隐式转换,比如常见的三目表达式.if().for().while.逻辑运算符 || &&,适当通过语言机制,抽象 ...

  4. 显示(explicit )与隐式(implicit)转换操作符

    class Program { static void Main(string[] args) { /* * 不管是显示还是隐式转换,一种类型都只能出现一次 */ Console.WriteLine( ...

  5. 2019.03.20 读书笔记 as is 以及重写隐式/显示

    强转.as is 的用法 强制转换类型有两种:子类转基类,重写隐式(implicit )\显示(explicit) 转换操作符 class myclass { private int value; p ...

  6. VC 静态库与动态库(三)动态库创建与使用_隐式链接

    动态库分为二种,一种隐式链接,另一种显示调用.不论哪种动态库,本质都是运行时动态加载 隐式链接:程序运行时,由编译系统自动加载动态库,然后根据程序的引入表进行重定位,当程序退出时自动卸载动态库 显示调 ...

  7. ahjesus自定义隐式转换和显示转换

    implicit    关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 参考戳此 explicit    ...

  8. DB性能-隐式转换

    1        什么是隐式转换 当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换.当然, 有些情况下有些类型是不可以发生转换的,比如说从DATE类型转换到N ...

  9. ORACLE数据库中执行计划出现INTERNAL_FUNCTION一定是隐式转换吗?

    ORACLE数据库中,我们会使用一些SQL语句找出存在隐式转换的问题SQL,其中网上流传的一个SQL语句如下,查询V$SQL_PLAN的字段FILTER_PREDICATES中是否存在INTERNAL ...

随机推荐

  1. POJ 1716 区间最小点个数

    题意:      给你n个区间,每个区间最少取两个元素,问你所有区间最少取几个元素(可以满足每个区间最少两个元素). 思路:      这个题目感觉挺巧妙的,之前在杭电上做过这个题目,这个题目可以用查 ...

  2. LA3644简单并查集判环

    题意:       有n个化合物,每个化合物是两种元素组成,现在要装车,但是一旦车上的化合物中的某几个化合物组成这样一组关系,有n个化合物正好用了n中元素,那么就会爆炸,输入的顺序是装车的顺序,对于每 ...

  3. upload

    File saveDir=new File("D:/Test/UPLOAD"); if(!saveDir.isDirectory()){ saveDir.mkdirs(); } F ...

  4. Power BI官方客户案例2021

    微软商业应用峰会Power BI客户案例,今年的客户案例相比前2年不同,主要是大客户,基本都是行业Top公司. 选取零售,医药制造,教育,医疗IT等行业龙头.沃尔玛,拜耳,滑铁卢大学的分享内容非常棒, ...

  5. C++入门教程之二:变量

    C++入门教程之二:变量 变量,顾名思义,意思是变化的量.变量的定义是计算机语言中能储存计算结果或能表示值的抽象概念.一个基本的程序需要变量,因此变量是程序设计中的一大重点. 变量基本结构 var_t ...

  6. 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?

    摘要:写卡路里计数器带女友减肥,抢票不忘分析系统bug,打造独家游戏只为成为你的另一半,程序员男友"浪漫"起来,谁能招架得住? 本文分享自华为云社区<520特辑丨码神VS爱神 ...

  7. [bug] Job for network.service failed because the control process exited with error code

    原因 复制虚拟机,没有改网卡配置文件 参考 https://blog.csdn.net/dongfei2033/article/details/81124465

  8. [Python] Flask从0到1开发轻量级网页

    概述 Flask采用MVT模型,即Model, Template, View Model:定义数据的存储格式,并且提供了数据库访问的API View:定义那些数据被显示,是业务逻辑处理模块 Templ ...

  9. Linux查看PCIe版本及速率# lspci -vvv |grep Width -i

    Linux查看PCIe版本及速率 https://www.cnblogs.com/lsgxeva/p/9542975.html# lspci -vvv |grep Width -i # lspci | ...

  10. shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

    shell脚本?在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包 ...