我很好奇在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的功能中,我可以检查值是否为数量与否.如果是数字,请不要引用它.如果它只是一个字符串,那么引用它.
性能成本是每当mysql需要进行类型转换时,无论你将它提供给列的数据类型.所以你的查询
SELECT col1,col2,col3 FROM table WHERE col1 ='3';
如果col1不是字符串类型,MySQL需要将'3'转换为该类型.这种类型的查询是不是一个真正的大问题,作为转换的性能开销是可以忽略不计.
但是,当您尝试执行相同的操作时,例如,连接2个表,每个表有几百万行.如果ON子句中的列不是相同的数据类型,那么MySQL 每次运行查询时都必须转换数百万行,这就是性能开销的来源.