我的印象是,数字是否被引用并不重要,但当我注意到这个简单的查询时:
SELECT id FROM table t WHERE t.col = 1234
执行0.21s
执行(其中id
是BIGINT
主键,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 |
+----+-------------+-------+------+------------------+------------------+---------+-------+------+-------------+
答案 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的一个怪癖是在查询数值时不能使用字符串类型索引。然而反之亦然。