一个单引号引发的MYSQL性能损失(转)
来源:互联网 发布:学历 英文 知乎 编辑:程序博客网 时间:2024/06/16 07:46
生活中难免遇到一些不如意,有些来自我们自身,而有些不是。今天冬至,说这一天是北半球白天最短、黑夜最长的。今天我们来分享下我的一个同事提到加没加单引号的巨大区别,对于MYSQL性能优化很有意义。
刚刚我们说过了,生活中难免会有一些不如意,比如,我们用一个字符串类型的字段来作为主键,表面上,这太不如意了,然而,事实也证明这是有用的。问题也就出来了,当在查询语句中对该字段值加上单引号和不加查询耗时相差百倍!
我建立的测试表是这样子的:
CREATE TABLE `foo` ( `key` VARCHAR(10) NOCREATE TABLE `foo` ( `key` VARCHAR(10) NOT NULL, `time` INT(11) NOT NULL, PRIMARY KEY (`key`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
T NULL, `time` INT(11) NOT NULL, PRIMARY KEY (`key`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
然后插入30多万条数据,然后执行下面的SQL语句:
SELECT *FROM `foo`WHERE `key` =1293322797
查询花费 0.1288 秒,大约花费这么久的时间,然后,给1293322797加上单引号:
SELECT *FROM `foo`WHERE `key` ='1293322797'
查询花费 0.0009 秒,基本上相差100倍!!!也就是说不加单引号MYSQL性能损失了100倍,很震撼的比例!
后来用EXPLAIN分别跑了一下上面两条语句,见下面两张图:
没有单引号时
有单引号时
很明显,不使用单引号没有用上主索引,并进行了全表扫描,使用单引号就能使用上索引了。
后来我用大于分别进行了测试,返回的结果集相同,而他们的耗时和上面一样,用EXPLAIN测试,也和上面一样
SELECT *FROM `foo`WHERE `key` >1293322797SELECT *FROM `foo`WHERE `key` >'1293322797'
加单引号和不加单引号就是这么大的差别!就是会对mysql性能产生这么大的影响。
再后来,我将字段`key`换成INT类型,这时候,加不加单引号,就没有什么差别了,EXPLAIN显示他们都同样能够用上主索引,只是key_len变短了。
0 0
- 一个单引号引发的MYSQL性能损失
- 一个单引号引发的MYSQL性能损失
- 一个单引号引发的MYSQL性能损失(转)
- MySQL—一个单引号引发的MYSQL性能损失
- [转发]一个单引号引发的MYSQL性能损失
- 【数据库原理】索引实例证明(一个单引号引发的MYSQL性能损失)
- 一个中间继电器引发的损失
- mysql加单引号和不加单引号的性能比较
- asp分页显示时单引号引发的一个错误!
- 异常处理的性能损失
- 单引号引发的[object XMLHttpRequest]错误
- Mysql的反单引号
- 利用Emit减少反射的性能损失
- 虚函数所造成的性能损失
- MySQL中一个双引号的错位引发的血案
- mysql 语句 单引号的使用
- mysql 中单引号的使用
- 一个 * 引发的血案
- Android之Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE问题解决
- HDOJ 1210 Eddy's 洗牌问题
- Android Design Support Library详解
- java非对称加密算法原理及应用
- Spring 基于 annotation 的自动装配
- 一个单引号引发的MYSQL性能损失(转)
- android使用min3d引擎加载模型
- 根据生日获取星座
- HDU 1241 Oil Deposits
- 线段树第一题!(激动啊)
- JavaScript基本语法、Console用法和Up&Going书籍总结
- react-active init XXX 没反应
- RYU和mininet安装教程
- uiautomatorviewer获取当前屏幕中的各个元素信息包括类名