Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在SELECT语句中,在数字周围加引号有什么影响?_Php_Mysql_Pdo - Fatal编程技术网

Php 在SELECT语句中,在数字周围加引号有什么影响?

Php 在SELECT语句中,在数字周围加引号有什么影响?,php,mysql,pdo,Php,Mysql,Pdo,我的印象是,数字是否被引用并不重要,但当我注意到这个简单的查询: 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:显然,

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

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 |
+----+-------------+-------+------+------------------+------------------+---------+-------+------+-------------+

就性能而言,它们对mysql并不重要。关于何时使用它们,您可以看到这个问题

您很可能正在经历预热的缓冲池或查询缓存。此外,当我在amazon上本地查询远程sql机器时,我可以根据自己的网络性能和远程机器负载来改变响应时间。如果您想真正测试它,请尝试分析查询


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

当您给查询一个数字时,在进行比较之前需要时间将其转换为字符串。看起来它已经被回答了,是非数字列吗?@DanielWilliams
t.col
是一个带索引的varchar(255)。这是预期的行为。不能使用字符串类型索引来帮助搜索数字类型。mysql将不得不进行完整的表扫描。然而,在相反的情况下,它将起作用。