关于MySQL查询约束条件类型需要注意的一点

最近在工作中遇到了数据库服务器产生很多读写队列的问题,于是要求大家开始优化我们的SQL语句。

下面是查询quotedata_history表中的code字段的SQL语句,其中code字段的类型是varchar(6)。

20121217210533

以上查询语句是:

SELECT * FROM quotedata_history WHERE `code` = 600000

大家可以看到这个语句的code条件600000是没有加引号的,通过Navicate的截图大家可以看到这次查询花了14.169秒。

20121217210534

以上查询语句是:

SELECT * FROM quotedata_history WHERE `code` = '600000'

大家可以看到这个语句的code条件600000加了引号,通过Navicate的截图大家可以看到这次查询花了0.087秒。

这两个查询的效率相差实在是太大了!

所以大家要注意,以后查询数据库的时候,如果字段是string类型的,条件的值必须加上单引号,以提升查询的效率!

 

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/1535.html

《关于MySQL查询约束条件类型需要注意的一点》有1个想法

  1. mysql隐式转换的规则:a. 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换b. 两个参数都是字符串,会按照字符串来比较,不做类型转换c. 两个参数都是整数,按照整数来比较,不做类型转换d. 十六进制的值和非数字做比较时,会被当做二进制串e. 有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestampf. 有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较g. 所有其他情况下,两个参数都会被转换为浮点数再进行比较

发表评论