ORACLE MYSQL中join 字段类型不同索引失效的情况

重庆八怪

2016-12-29

780浏览量

简介:

关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACLE都是如此,

下面使用一个列子来看看,脚本如下:

mysql:

drop table testjoin1;

drop table testjoin2;

create tab...

关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACLE都是如此,

下面使用一个列子来看看,脚本如下:

mysql:

drop table testjoin1;

drop table testjoin2;

create table testjoin1(id int, name varchar(20));

create table testjoin2(id varchar(20),name varchar(20),key(id);

oracle:

drop table testjoin1;

drop table testjoin2;

create table testjoin1(id int,name varchar2(20));

create table testjoin2(id varchar(20),name varchar2(20));

create index test_id_2 on testjoin2(id);

insert into testjoin1 values(1,'gaopeng');

insert into testjoin1 values(2,'gaopeng');

insert into testjoin1 values(3,'gaopeng');

insert into testjoin1 values(4,'gaopeng');

insert into testjoin1 values(5,'gaopeng');

insert into testjoin2 values('1','gaopeng');

ORACLE中的隐士转换,

SQL> select /*+ use_nl(a b) ordered */ * from testjoin1 a join testjoin2 b on a.id=b.id  ;

ID NAME                 ID                   NAME

---------- -------------------- -------------------- --------------------

1 gaopeng              1                    gaopeng

Execution Plan

----------------------------------------------------------

Plan hash value: 2498279186

--------------------------------------------------------------------------------

| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------

|   0 | SELECT STATEMENT   |           |     1 |    49 |     5   (0)| 00:00:01 |

|   1 |  NESTED LOOPS      |           |     1 |    49 |     5   (0)| 00:00:01 |

|   2 |   TABLE ACCESS FULL| TESTJOIN1 |     5 |   125 |     2   (0)| 00:00:01 |

|*  3 |   TABLE ACCESS FULL| TESTJOIN2 |     1 |    24 |     1   (0)| 00:00:01 |

--------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

3 - filter("A"."ID"=TO_NUMBER("B"."ID")) --虽然TESTJOIN2是被驱动表由于隐士转换索引用不到

mysql> explain select * from testjoin1 a Straight_JOIN testjoin2 b on a.id=b.id  ;

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+

| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                              |

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+

|  1 | SIMPLE      | a     | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    5 |   100.00 | NULL                                               |

|  1 | SIMPLE      | b     | NULL       | ALL  | id            | NULL | NULL    | NULL |    1 |   100.00 | Using where; Using join buffer (Block Nested Loop) |

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+

2 rows in set, 3 warnings (0.00 sec)

Warning (Code 1739): Cannot use ref access on index 'id' due to type or collation conversion on field 'id' --虽然TESTJOIN2是被驱动表由于隐士转换索引用不到 possible_keys可以看出

Warning (Code 1739): Cannot use range access on index 'id' due to type or collation conversion on field 'id'

Note (Code 1003): /* select#1 */ select `test`.`a`.`id` AS `id`,`test`.`a`.`name` AS `name`,`test`.`b`.`id` AS `id`,`test`.`b`.`name` AS `name` from `test`.`testjoin1` `a` straight_join `test`.`testjoin2` `b` where (`test`.`a`.`id` = `test`.`b`.`id`)

MYSQL手册原文:

To retrieve rows from other tables when performing joins. MySQL can use indexes on columns more

efficiently if they are declared as the same type and size. In this context, VARCHARand CHARare

considered the same if they are declared as the same size. For example, VARCHAR(10)and CHAR(10)

are the same size, but VARCHAR(10)and CHAR(15)are not.

Oracle

关系型数据库

MySQL

索引

数据库

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

mysql join 索引 无效_ORACLE MYSQL中join 字段类型不同索引失效的情况-阿里云开发者社区...相关推荐

  1. mysql数据库div函数_关于使用mysql中的div函数报错?报错-问答-阿里云开发者社区-阿里云...

    数据库MySQL 5.5.27 jar包:mysql-connector-java-5.1.21.jar mybatis-spring-1.1.1.jar druid-0.2.10.jar 集成myb ...

  2. mysql cmake错误_MySQL5.5安装出现CMake错误找不到CMakelists.txt原因-阿里云开发者社区...

    今天虚拟机上测试安装 CentOS6.3 + PHP5.4.8 + MySQL5.5.28,结果捣鼓了半天 MySQL都没装上,老是CMake目录下找不到那个 lists 文件,郁闷的不行,最后发现问 ...

  3. mysql safe 关闭_新手请教,mysqld经常自动关闭是什么原因?-问答-阿里云开发者社区-阿里云...

    错误日志如下: 61103 22:12:15 mysqld_safe Number of processes running now: 0 161103 22:12:15 mysqld_safe my ...

  4. python中执行shell命令_python中执行shell命令的几个方法小结-阿里云开发者社区

    Python 执行 shell 命令 最近有个需求就是页面上执行shell命令,第一想到的就是os.system os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令 ...

  5. mysql double 存储_关于MYSQL中FLOAT和DOUBLE类型的存储-阿里云开发者社区

    关于MYSQL中FLOAT和DOUBLE类型的存储 重庆八怪 2016-04-12 844浏览量 简介: 关于MYSQL中FLOAT和DOUBLE类型的存储 其实在单精度和双精度浮点类型存储中其存储方 ...

  6. freebsd mysql 安装_Freebsd中mysql安装及使用笔记-阿里云开发者社区

    Freebsd中mysql安装及使用笔记 x3d 2009-07-31 662浏览量 简介: 1.安装 一开始连mysql的软件包在freebsd中叫什么都不知道: 依稀属于databases类,先到 ...

  7. MySQL创建索引-阿里云开发者社区

    如果你在查询时常用类似以下的语句: SELECT * FROM mytable WHERE category_id=1; 最直接的应对之道,是为category_id建立一个简单的索引: CREATE ...

  8. typescript索引类型_复杂场景下的 typescript 类型锚定 (1) ----- 对象索引提取-阿里云开发者社区...

    前言:在编写 typescript 应用的时候,有时候我们会希望复用或者构造一些特定结构的类型,这些类型只从 typescript 靠内建类型和 interface.class 比较难以表达,这时候我 ...

  9. mysql5.5索引如何定义_MySQL5.5索引数在InnoDB引擎内与索引数在mysql中定义的数量是不一致问题-阿里云开发者社区...

    在查看MySQL错误日志的时候发现这样的错误,如下: 160322 21:42:59 [ERROR] Table baby/baby_order contains 12 indexes inside ...

最新文章

  1. 第二次冲刺阶段第四天
  2. java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector解决方法
  3. 现代永磁电机交流伺服系统_【每日文献】2020-002 永磁同步电机模糊自整定自适应积分反步控制...
  4. no segments* file found in SimpleFSDirectory问题总结
  5. Linux 修改IP及虚拟网卡配置详解
  6. Spring-aop-AnnotationAwareAspectJAutoProxyCreator类
  7. android批量文件上传(android批量图片上传)
  8. TP5框架开发 很不错的小程序商城源码!免费开源
  9. 设计模式在项目中的应用案例_BIM案例 | BIM技术在码头项目中的创新应用
  10. 第4章:图数据处理管道
  11. 计算机学生的高职英语课程,高职计算机英语课程教学方法探索
  12. MATLAB编写m函数理解 y=f(g(x))*h(x)
  13. 史上最全Python快速入门教程
  14. 十载寒冰,难凉热血——2020CSDN年度博客之星Top10心路历程
  15. 苹果手机的定向广告时代告终
  16. JAVA Applet版的连连看游戏
  17. SpringBoot Thymeleaf Vue Mybatis 登录和注册的实现,以及使用Cookie实现七天免登录
  18. 吐血整理一个月——终于把所有Python库整理齐了.....
  19. 【已解决】在Overleaf/latex环境编辑Elsevier -> JVCI模板,参考文献显示为问号/不显示参考文献的问题
  20. MySQL 如何实现数据插入

热门文章

  1. 计算机学科专业基础综合961,2017年北京航空航天大学计算机学院961计算机学科专业基础综合之数据结构考研强化模拟题...
  2. go 文件服务器 搜索,golang文件服务器,可以访问任何目录
  3. 超干货议程发布 | 2021全球分布式云大会 · 上海站 重磅来袭
  4. 【ACDU推荐好文】手把手教你 DBCA 搭建 Oracle ADG
  5. 一文搞懂MySQL-8.0 redo优化
  6. PostgreSQL复制特性历史漫谈-士别三日,当刮目相看
  7. 智能运维就是由 AI 代替运维人员?
  8. 如何支撑企业快速构建数字孪生体
  9. DCI架构是如何解决DDD战术建模缺点的?
  10. 一文搞懂如何使用Node.js进行TCP网络通信