在Mysql查询中引用整数的缺点?

and*_*rew 5 mysql performance

我很好奇在MYSQL查询中引用整数的缺点

例如

SELECT col1,col2,col3 FROM table WHERE col1='3';
Run Code Online (Sandbox Code Playgroud)

VS

SELECT col1,col2,col3 FROM table WHERE col1= 3; 
Run Code Online (Sandbox Code Playgroud)

如果有性能成本,它的大小是什么以及为什么会出现?表演还有其他任何不利之处吗?

谢谢Andrew

编辑:这个问题的原因
1.因为我想学习差异,因为我很好奇
2.我正在尝试一种从我的PHP代码中传递复合键的方法,如psudo-Id-keys(PIK).这些PIK用于定位记录.例如,给定主键(AreaCode,Category,RecordDtm)

我在网址中的PIK看起来像这样:

index.php?action=hello&Id=20001,trvl,2010:10:10 17:10:45
Run Code Online (Sandbox Code Playgroud)

我会选择这样的记录:

$Id = $_POST['Id'];//equals 20001,trvl,2010:10:10 17:10:45
$sql = "SELECT AreaCode,Category,RecordDtm,OtherColumns.... FROM table WHERE (AreaCode,Category,RecordDtm) = ({$Id});
$mysqli->query($sql):
......and so on.
Run Code Online (Sandbox Code Playgroud)

此时查询将无法工作,因为datetime(必须引用)并且它对sql注入是开放的,因为我没有转义这些值.鉴于我不会总是知道我的PIK是如何构造的,我会写一个函数将Id PIK分成逗号,用real_escape_string清理每个部分并将它与引用的值一起放回去.例如:$ Id ="'20001','trvl','2010:10:10 17:10:45'"当然,在这个分解和清理Id的功能中,我可以检查值是否为数量与否.如果是数字,请不要引用它.如果它只是一个字符串,那么引用它.

Chr*_*nry 6

性能成本是每当mysql需要进行类型转换时,无论你将它提供给列的数据类型.所以你的查询

SELECT col1,col2,col3 FROM table WHERE col1 ='3';

如果col1不是字符串类型,MySQL需要将'3'转换为该类型.这种类型的查询是不是一个真正的大问题,作为转换的性能开销可以忽略不计.

但是,当您尝试执行相同的操作时,例如,连接2个表,每个表有几百万行.如果ON子句中的列不是相同的数据类型,那么MySQL 每次运行查询都必须转换数百万行,就是性能开销的来源.


Sac*_*hag 1

据我所知,我认为您提到的情况没有性能/尺寸成本。即使有,那么它也可以忽略不计,不会影响您的应用程序。