如果使用字符串类型的字段来做主键,当我们在查询语句中对该字段值加上单引号和不加查询耗时相差很大!

建表语句:

CREATE TABLE `foo` (`key` VARCHAR(10) NOT 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性能损失很大!
        后来用EXPLAIN分别跑了一下上面两条语句,见下面两张图:

没有使用单引号:

有单引号时:

很明显,不使用单引号没有用上主索引,而是进行了全表扫描,使用单引号就能使用上索引了。后来我用大于分别进行了测试,返回的结果集相同,而他们的耗时和上面一样,用EXPLAIN测试,也和上面一样:

SELECT * FROM `foo` WHERE `key` >1293322797
SELECT * FROM `foo` WHERE `key` >'1293322797'

再后来,我将字段`key`换成INT类型,这时候,加不加单引号,就没有什么差别了,EXPLAIN显示他们都同样能够用上主索引,只是key_len变短了。

综上所述,我们在写SQL查询的时候还是不厌其烦的加上单引号吧,似乎那没有坏处。

MySQL—一个单引号引发的MYSQL性能损失相关推荐

  1. Mysql中where条件一个单引号引发的性能损耗

    日常写SQL中可能会有一些小细节忽略了导致整个sql的性能下降了好几倍甚至几十倍,几百倍.以下这个示例就是mysql语句中的一个单引号('')引发的性能耗损,我相信很多朋友都遇到过,甚至还在这样写. ...

  2. mysql 过滤单引号_python实现mysql的单引号字符串过滤方法

    本文实例讲述了python实现mysql的单引号字符串过滤方法.分享给大家供大家参考,具体如下: 最主要用这个函数,可以处理MySQLdb.escape_string(content). class ...

  3. php mysql 单引号_插入MySQL时转义PHP中的单引号

    我有一个困惑的问题,我似乎无法理解... 我有两个SQL语句: 第一个将信息从表单输入数据库. 第二个从上面输入的数据库中获取数据,发送电子邮件,然后记录交易的详细信息 问题是似乎单引号仅在第二个条目 ...

  4. mysql注入单引号被转义_插入MySQL时转义PHP中的单引号[重复]

    这个问题已经在这里有了答案 : 4年前关闭. 我有一个困惑的问题,我似乎无法理解- 我有两个SQL语句: 第一个将信息从表单输入数据库. 第二个从上面输入的数据库中获取数据,发送电子邮件,然后记录交易 ...

  5. mysql注入单引号被过滤_避开sql注入过滤的几个方法

    有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷. 唱出会删除或者净化一些字符,或者阻止常用的sql关键词. 我们通常有以下几种技巧,去避开这 ...

  6. mysql转义单引号双引号_[转] mysql 单引号 双引号

    今天在写一条sql语句的时候,用的双引号,sql语句执行错误.记的同事问我mysql语句中的单引号和双引号有区别吗?回答是没有区别. 今天特地查了查,还是有点区别的. mysql中的一段说明: 在my ...

  7. MYSQL 因单引号报语法错误

    命令行里带单引号要报语法错误 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds ...

  8. mysql注入单引号和双引号的区别_mysql单引号和双引号的用法

    表名,列名最好用`(esc下面那个,不用`会出错) 这就要从双引号和单引号的作用讲起: 双引号里面的字段会经过编译器解释然后再当作HTML代码输出,但是单引号里面的不需要解释,直接输出.例如: $ab ...

  9. mysql的单引号[ ' ],双引号[ ]和esc下面的反勾号[ ` ]的区别

    这两天写sql的时候,发现别名什么的喜欢直接使用双引号, 可是好像有时候用双引号会报错,或者单引号会报错, 所以详细把这三个符号区分了一下. 单引号 ' 和双引号 "都可以表示字符串,所以没 ...

  10. mysql注入单引号被过滤_证明过滤单引号的ORDER BY可以注入

    题目:证明基于ORDER BY的SQL 注入,且单引号(')被过滤. 已知:代码如下,有注入无悬念. $sortColumn = mysqli_real_escape_string($_GET['so ...

最新文章

  1. ASP.NET Core 上传多文件 超简单教程
  2. shell转换特殊的格式(%b)到时间戳  08/Dec/2016
  3. SAP常见问题与解决办法 2
  4. 客户端soap【JAX-WS入门系列】第04章_SOAP异常处理和Handler处理
  5. Linux学习:目录遍历函数
  6. CF662C-Binary Table【FWT】
  7. dos下登录fedora下的vsftp失败
  8. jquery输入框按下回车提交表单
  9. HDU 4664 Triangulation(SG函数)
  10. FlyMcu开始连接一直未接收到的解决方案
  11. SwiftyJSON的基本用法
  12. python做3d相册_简单3D翻页相册制作教程(示例代码)
  13. elk logstach收集交换机日志
  14. 用Proj.4进行坐标系转换(以北京54坐标系转WGS84投影坐标系为例)
  15. (C语言)2048游戏实现
  16. 百度指数和股票的相关性
  17. 低功耗设计实现中secondary power pin的连接方法汇总
  18. [文献阅读]—一篇不错的低资源机器翻译综述(Neural Machine Translation for Low-Resource Languages: A Survey)
  19. 歌单详情内容-图标列表 (音乐app项目-第7步)
  20. Linux之root密码忘记

热门文章

  1. 串口发送字符串到串口软件
  2. [LeetCode]Linked List Cycle
  3. 《工作型PPT设计之道》培训心得
  4. SDRAM之持续中。。。。。。
  5. windows API 第22篇 WTSGetActiveConsoleSessionId
  6. zabbix邮件报警功能的验证
  7. 为storyBoard面板中添加圆角属性(添加自定义的属性)
  8. 通过一个实例掌握测试工具JMeter的一些基本概念
  9. Linux01-BASH脚本编程之信号捕捉及任务计划53
  10. SCAU 8628 相亲