关于MySQL隐式转换

一、如果表定义的是varchar字段,传入的是数字,则会发生隐式转换。

1、表DDL

2、传int的sql

3、传字符串的sql

仔细看下表结构,rid的字段类型:

  

而用户传入的是int,这里会有一个隐式转换的问题,隐式转换会导致全表扫描。

把输入改成字符串类型,执行计划如下,这样就会很快了。

此外,还需要注意的是:

数字类型的0001等价于1

字符串的0001和1不等价

二、如果表定义的是int字段,传入的是字符串,在不超过int范围内,不会发生隐式转换,如果超出范围并且比较大小(以字符串类型比较‘$‘)会隐式转换。

1、表DDL

2、不超范围传字符串的sql

3、不超范围传数字的sql

  

4、超出范围传字符串的sql

5、超出范围传数字的sql

时间: 2024-07-31 15:49:34

关于MySQL隐式转换的相关文章

MySQL SQL优化之字符串索引隐式转换

之前有用户很不解:SQL语句非常简单,就是select * from test_1 where user_id=1 这种类型,而且user_id上已经建立索引了,怎么还是查询很慢? test_1的表结构: CREATE TABLE `test_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` varchar(30) NOT NULL, `name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`),

MySQL性能优化:MySQL中的隐式转换造成的索引失效

数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性.在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很小的疏忽造成的,又或者是因为不了解某个技术特性产生的. 于数据库层面,最常见的恐怕就是索引失效了,且一开始因为数据量小还不易被发现.但随着业务的拓展数据量的提升,性能问题慢慢的就体现出来了,处理不及时还很容易造成雪球效应,最终导致数据库卡死甚至瘫痪.造成索引失效的原因可能有很多种,相关技术博客已经有

Mysql中的隐式转换

在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引,下面分析两种隐式转换的情况看表结构phone为int类型,name为varchar类型 EXPLAIN select * from user where phone   = '2' EXPLAIN select * from user where phone   = 2 两种情况都可以用到索引,这次等号右侧是'2',注意带单引号哟,左侧的索引字段是int类型,因此也会发生隐式转换,但因为int类型的数

也议MySQL中隐式转换

1. 环境说明 blog地址:http://blog.csdn.net/hw_libo/article/details/39252427 RHEL 6.4 x86_64 + MySQL 5.6.19 测试表: MySQL [test]> show create table emp\G *************************** 1. row *************************** Table: emp Create Table: CREATE TABLE `emp`

MYSQL隐式类型转换

MYSQL隐式类型转换 关于官方文档中的理解大致是: 如果两个参数比较,有至少一个NULL,结果就是NULL,除了是用NULL<=>NULL 会返回1.不做类型转换 两个参数都是字符串,按照字符串比较.不做类型转换 两个参数都是整数,按照整数比较.不做类型转换 如果不与数字进行比较,则将十六进制值视为二进制字符串. 有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为时间戳 有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整

谈谈 MySQL 隐式类型转换

前言 今天我们继续回到MySQL系列文章中,谈一谈MySQL中隐式类型转换.(其实我最早知道是在慢SQL优化中知道隐式类型转换概念的),在说隐式类型转换之前,首先我们通过一个实例来看看是怎么回事. 数据结构 本文中所有的操作,都是基于该数据结构(有兴趣的童鞋,可以实验): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 create table t_base_user( oid bigint(20) not null primary key auto_incr

Atitit.变量的定义&#160;获取&#160;储存&#160;物理结构&#160;基本类型简化&#160;隐式转换&#160;类型推导&#160;与底层原理&#160;attilaxDSL

Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3. 变量的存储,储存在变量池里Map(varName,varVal)1 1.3.1. 复合变量1 1.4. 变量类型简化: 字符串 数字,  bool1 1.5. 变量自动隐式转换2 1.6. 类型推导2 2. 参考 复合变量2 1.1. $ 美元字符, php 黑头 1.2. 默认变量的范围和声明

第五篇:你“ 看不见 ” 的隐式转换

前言 对于隐式转换,想必你已经了解了算数转换中的“ 向上对齐 ”的概念:了解了赋值隐式转换的规律( 右值类型转换为左值类型 ).但C++中的隐式转换远不止这些,本文就将告诉你一些容易被忽略,但事实上发生了的隐式转换. 数组转换为指针 在许多情况下,数组都隐式转换为了指针.取数组元素的过程就是根据首元素和元素序号以及元素大小到指定位置取值:数组作为函数参数传递给函数的过程中也转换成了指向首元素的指针.当然,在一些其他的场合,隐式转换未必发生,比如sizeof( 数组 )就不会隐式转换为sizeof

隐式转换

发现某一条语句消耗较高,执行比较频繁数据库版本如下将TextData语句拷贝到查询窗口执行将sp_executesql中的主体语句拷贝到查询窗口执行执行计划的总体流向是一致的,根据token得到LKLoginTokenRecord,然后嵌套循环AccountsInfoSimple.但是sp_executesql语句的执行计划有常量扫描和计算标量的操作,并且在索引查找中有谓词CONVERT_IMPLICIT(nvarchar(32),[DBname].[dbo].[LKLoginTokenReco