在SELECT语句中放置数字时,引号有什么影响?

时间:2014-12-16 01:53:53

标签: php mysql pdo

我的印象是,数字是否被引用并不重要,但当我注意到这个简单的查询时:

SELECT id FROM table t WHERE t.col = 1234

执行0.21s执行(其中idBIGINT主键,col是varchar带索引),我知道有些事情是对的

在摆弄了一段时间之后,我尝试在数字周围加上引号:

SELECT id FROM table t WHERE t.col = "1234"

执行时间降至0.046s

这是侥幸,还是确实如果引用了数字呢?

编辑:此外,这如何影响参数绑定的PDO查询?

编辑2:显然查询计划不同:

没有引号:

+----+-------------+-------+------+------------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys    | key  | key_len | ref  | rows  | Extra       |
+----+-------------+-------+------+------------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | t     | ALL  | ind_col          | NULL | NULL    | NULL | 99431 | Using where |
+----+-------------+-------+------+------------------+------+---------+------+-------+-------------+

引用:

+----+-------------+-------+------+------------------+------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys    | key              | key_len | ref   | rows | Extra       |
+----+-------------+-------+------+------------------+------------------+---------+-------+------+-------------+
|  1 | SIMPLE      | t     | ref  | ind_col          | ind_col          | 767     | const |    1 | Using where |
+----+-------------+-------+------+------------------+------------------+---------+-------+------+-------------+

1 个答案:

答案 0 :(得分:2)

就性能而言,它们与mysql无关。对于何时使用它们,您可以看到此问题When to use single quotes, double quotes, and backticks in MySQL

您最有可能遇到预热缓冲池或查询缓存。此外,当我在亚马逊本地查询远程sql机器时,我可以根据自己的网络性能和远程机器负载的响应时间变化。如果你想真正测试它,请尝试分析查询。

http://dev.mysql.com/doc/refman/5.5/en/show-profile.html

对于这种特殊情况,mysql的一个怪癖是在查询数值时不能使用字符串类型索引。然而反之亦然。