`
carrie_lynn
  • 浏览: 10229 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

转:一个单引号引发的MYSQL性能损失

阅读更多

一个单引号引发的MYSQL性能损失12/22/2010

生活中难免遇到一些不如意,有些来自我们自身,而有些不是。今天冬至,说这一天是北半球白天最短、黑夜最长的。今天我们来分享下我的一个同事提到加没加单引号的巨大区别,对于MYSQL性能优化很有意义。

刚刚我们说过了,生活中难免会有一些不如意,比如,我们用一个字符串类型的字段来作为主键,表面上,这太不如意了,然而,事实也证明这是有用的。问题也就出来了,当在查询语句中对该字段值加上单引号和不加查询耗时相差百倍!

我建立的测试表是这样子的:

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性能损失了100倍,很震撼的比例!

后来用EXPLAIN分别跑了一下上面两条语句,见下面两张图:


没有单引号时


有单引号时

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

SELECT
 *

FROM
 `foo`

WHERE
 `key`
 >
1293322797

SELECT
 *

FROM
 `foo`

WHERE
 `key`
 >
'1293322797'

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

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

 

原文出自:http://www.zendstudio.net/archives/single-quotes-or-no-single-quotes-in-sql-query/#more-1413

分享到:
评论

相关推荐

    在MySQL concat里面使用多个单引号,三引号的问题

    1、”’+ id +”’ 为什么是3个引号,为什么左边一个加号右边一个加号(能不能着重帮我解释下这个,详细点) SQL code sum(case Leave when ”’+ id +”’ then DaysNo else 0 end) [‘+ name +’]’ 正常语句: ...

    一个单引号引发的MYSQL性能问题分析

    标题提到的“一个单引号引发的MYSQL性能问题分析”实际上是指在查询字符串类型主键时,是否使用单引号对查询效率的差异。 首先,我们要明白的是,数据库中的字段类型决定了数据的存储方式和查询方式。在描述中提到...

    关于Mysql查询带单引号及插入带单引号字符串问题

    然而,为了确保安全性,通常建议始终使用引号将字符串值包围,尽管这可能导致轻微的性能损失。 对于PHP的`get_magic_quotes_gpc`配置,这是一个过时的功能,它会在用户提交的数据中自动添加反斜杠。但是,由于它已...

    SQL Server中单引号的两种处理技巧

    它通过遍历字符串,每当遇到一个单引号,就在其前面添加一个单引号,从而实现字符串的转义。 2. **利用数据对象的参数化查询**: - 另一种更安全且高效的方法是使用ADODB.Command对象,将包含单引号的字符串作为...

    信息安全技术基础:单引号引发的悲剧.pptx

    这里,单引号 `'` 开启了一个字符串,但没有关闭,随后的 `or 1=1` 使得条件永远为真,而 `--` 注释掉了后续的密码检查部分。因此,无论输入什么密码,这个查询都会返回所有用户的记录,让攻击者可以轻易地登录任何...

    SQL语法关于&、双引号、和单引号的解释

    但是,在ASP中,我们通常这样写:strSql="Insert Into users(username) values('小王')",这里的双引号表示中间是一个字符串,而小王两边的单引号是因为发生了引号嵌套,所以内层引号改为了单引号。 实际插入时,...

    单引号与双引号在不同语言中的区别(C语言,Python语言,Matlab语言)

    整理时间:2020-02-19 内容要点:单引号与双引号在不同语言中的区别 C语言 : ...C规定以字符’\0’作为字符串结束标志,’\0’是一个ASCII码为0的字符,它不会引起任何控制动作,也不是一个可显示的

    SQL中存储过程中SQL语句的单引号和双引号问题[总结].pdf

    当我们需要插入多个字段时,需要使用多个单引号和双引号,如以下示例所示: strSql="Insert Into users(username,password) values('" & myusername & "','" & mypassword & "')" 在上面的示例中,双引号用来表示...

    解决python 执行sql语句时所传参数含有单引号的问题

    在Python中,单引号(')在SQL语句中需要被转义为两个单引号(''),这样数据库会将其识别为字符串的一部分而不是字符串结束的标记。在示例代码中,`result2.replace("'","\\'")`这行代码就是用来做这个转换的。这里...

    string字符串自动格式化单引号分隔工具

    "string字符串自动格式化单引号分隔工具"就是一个专为简化这一任务而设计的应用。它能够自动将一个字符串按照指定的单引号进行分隔,以便于在SQL的IN查询语句中更方便地使用。 首先,我们要理解什么是字符串。在...

    解决sqoop2导入hdfs单引号问题

    使用sqoop2从mysql导入hadoop时,导入的数据带单引号。是由于sqoop2的一个bug导致,该包上传到sqoop_home/server/lib替换原来的jar包后,重启sqoop server,即可解决。

    给行文本添加单引号例子

    - 如果字符串本身包含单引号,需要使用两个单引号来转义,如 `'It''s a good day'`,这会被解析为包含一个单引号的字符串。 2. **Python 编程**: - 在Python中,单引号 (`'`) 和双引号 (`"`) 都可以用来创建字符...

    JSP向MYSQL插入单引号内容出错的解决方法.pdf

    如果执行一个插入 SQL 语句,而 SQL 语句中含有一个单引号的话,则会导致 SQL 语法错误。例如,以下代码将导致错误: ;charset=utf-8" language="java" %> <jsp:useBean id="DBConn" scope="page" class="conn....

    asp单引号双引号.doc

    根据提供的文档信息,本文主要探讨了ASP语言中关于单引号、双引号以及连接运算符`&`的使用规则。这些符号在编程过程中扮演着重要角色,尤其是在处理字符串和构建SQL语句时。接下来,我们将对这些知识点进行详细的...

    php双引号、单引号的区别.zip

    而在单引号字符串中,这将被视为一个未解析的字符串。 5. 非变量表达式: 当你想要包含特殊字符序列,如 `\n`(换行)或 `\t`(制表符)时,无论使用双引号还是单引号,它们都会被正确解析。 6. {$a} 和 $a 的...

    linux系统中单引号和双引号的区别

    例如,如果你想在脚本中输出一个固定的字符串,你可以使用单引号;如果你想要输出一个变量的值,则需要使用双引号。 ```bash #!/bin/bash var="example value" echo 'This is a fixed string.' echo "The ...

    SQL Server单引号两种处理技巧

    采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦SQL语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL语法不对,本文介绍了两种可以解决和处理这种单引号的问题的方法。

Global site tag (gtag.js) - Google Analytics