关于MySQL数据库的数据类型发生隐形转换的问题咨询

标签: MySQL 数据类型 索引 隐形转换 | 发表时间:2014-07-25 21:08 | 作者:Eugene
出处:http://www.zhdba.com/mysqlops

网友的问题:

1.MySQL对于int类型索引使用问题,如:tb中有主键id,普通索引tid,在执行SQL:select * from tb where id = 2 order by id 时,
extra为空,这里的id值没带引号,如果带上引号extra也为空。

2.当 select * from tb where tid = 2 order by tid,tid为普通索引,这时tid的值带引号和不带引号就会有区别,带引号时extra会提示额外的排序,不带引号时extra为空,这是怎么一回事?
zhdba

mysqlops的回答:

1.当字段类型为:INT;

2. 传入的值为:字符串类型;

3.WHERE条件中的整型字段的传入值用单引号或双引号;

上述描述的前提条件下,会对把传入的 值类型 转换为 字段定义的数据类型,故WHERE 条件是可以使用到索引的,但从数据

库表读出到内存块后的值会被 转换为 传入值的数据类型,从而导致ORDER BY无法使用到索引解释为何ORDER BY ID没有外

部排序 或extra的内容为空,那是因为WHERE ID=’2′ 按主键查询只能查到唯一的一条记录,故不需要排序;

ORDER BY tid 时,WHERE tid=’2′ 按普通索引去查找的话,能查找到的数据条数会大于1条,加上数据类型隐形转换了,为

此需要再额外进行排序和extra部分有内容显示;

总结:

数据库中要尽量避免发生数据隐形转换的危险,极端情况下可能会发生偶尔的WHERE条件都无法使用到索引,故开发规范

非常重要。

相关 [mysql 数据库 数据类型] 推荐:

关于MySQL数据库的数据类型发生隐形转换的问题咨询

- - mysqlops
1.MySQL对于int类型索引使用问题,如:tb中有主键id,普通索引tid,在执行SQL:select * from tb where id = 2 order by id 时,. extra为空,这里的id值没带引号,如果带上引号extra也为空. 2.当 select * from tb where tid = 2 order by tid,tid为普通索引,这时tid的值带引号和不带引号就会有区别,带引号时extra会提示额外的排序,不带引号时extra为空,这是怎么一回事.

高性能MySql进化论(二):数据类型的优化_下

- - CSDN博客数据库推荐文章
在实际的应用程序中往往需要存储两种体积较大的数据,一种是较大的Binary数据,e.g. 一张10M的图片,另外一种是 较大的文本 e.g.一篇几万字的文章. 在Oracle中有BOLB和CLOB来应对这两种数据,而在MySQL中对应的是BLOB以及TEXT. 鉴于这两种数据类型的特殊性,在MySQL中对BLOB以及TEXT的存储和操作做了特殊的处理:.

MySQL datetime数据类型设置当前时间为默认值

- - CSDN博客推荐文章
        环境:MySQL Sever 5.1 + MySQL命令行工具.         问题:MySQL datetime数据类型设置当前时间为默认值.          由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的.

MYSQL查询优化:数据类型与效率

- - haohtml's blog
这一部分提供了如何选择数据类型来帮助提高查询运行速度的一些指导:. 在可以使用短数据列的时候就不要用长的. 如果你有一个固定长度的CHAR数据列,那么就不要让它的长度超出实际需要. 如果你在数据列中存储的最长的值有 40个字符,就不要定义成CHAR(255),而应该定义成CHAR(40). 如果你能够用MEDIUMINT代替BIGINT,那么你的数据表就小一些 (磁盘I/O少一些),在计算过程中,值的处理速度也快一些.

高性能MySql进化论(一):数据类型的优化_上

- - CSDN博客数据库推荐文章
在数据库的性能调优的过程中会涉及到很多的知识,包括字段的属性设置是否合适,索引的建立是否恰当,表结构涉及是否合理,数据库/操作系统 的设置是否正确…..其中每个topic可能都是一个领域. 在我看来,在数据库性能提升关键技术中,对字段的优化难度相对较低且对性能的影响也非常的大. 由于Mysql支持的数据类型比较多,且每个类型都有其独特的特性,但是有时候在选择一个具体的数据类型时,往往都是随意的选择一个能用的类型,而不会考虑到这个类型是否是最优的.

MySQL数据库的修复

- Xin - 博客园-首页原创精华区
找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:. 然后myisamchk 工具会帮助你恢复数据表的索引. 好象也不用重新启动mysql,问题就解决了. 当你试图修复一个被破坏的表的问题时,有三种修复类型. 如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的.

MySQL数据库的IO操作

- - haohtml's blog
         淘宝丁奇分享的PPT:MySQL数据库的IO操作,详细分享了四块的内容,并且告诉大家如何调整MySQL数据库IO操作相关的参数,给出了详细的选择策略,现替其整理成文章分享与此. 4.影响io行为的一些参数和选择策略. 一个简单的查询 select * from t where id>=(  select id from t where k1=100 limit 100000,1) limit 2;.

MySQL数据库优化总结

- - CSDN博客推荐文章
        对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要. 一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小.        一、数据库设计   适度的反范式,注意是适度的.

Google数据库产品LevelDB对决MySQL

- - HTML5研究小组
去年一月份,Google发布了LevelDB. LevelDB是Key-Value嵌入式数据库管理系统编程库,目前的版本能够支持Billion级别的数据量. LevelDB是一个C++库,可按照字符串键值顺序映射. 源于其本身的良好设计,特别是LSM算法,LevelDB性能非常之高. 在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w.

excel数据导入mysql数据库

- - 互联网 - ITeye博客
1、excel另存为txt.       选中将要导出的数据列,然后另存为选择其它格式=>文本文件(制表符分割). E:\项目\fblike\game_code_san.txt. 2、txt导入到mysql数据库. load data infile 'E:\\项目\\fblike\\game_code_san.txt' into table game_code_san(code).