我不时会看到人们说从客户端应用程序发送到服务器的SQL查询不应包含任何额外的换行符或空格。我听到的原因之一是“为什么要浪费网络流量?”。
是否真的有理由让代码更难以阅读和编辑,而不是删除所有空格?
有空格:
$q = 'SELECT
`po`.*,
`u`.`nickname`,
`u`.`login`
FROM
`postponed_operations` AS `po`
LEFT JOIN `users` AS `u` ON `u`.`id` = `po`.`user_id`
ORDER BY `will_be_deleted_after`';
return mysql_query($q);
没有空格:
$q = 'SELECT '.
'`po`.*,'.
'`u`.`nickname`,'.
'`u`.`login`'.
'FROM '.
'`postponed_operations` AS `po` '.
'LEFT JOIN `users` AS `u` ON `u`.`id`=`po`.`user_id` '.
'ORDER BY `will_be_deleted_after`';
return mysql_query($q);
答案 0 :(得分:11)
确实,它将耗费网络流量和服务器时间;但除了最极端的情况外,它几乎可以忽略不计。 现在,如果您正在编辑FaceBook(或Google或类似代码)的代码,并以这种方式优化10个最常见的查询,那么有一点,因为它们将每天运行数十亿次。 但在所有其他情况下,我认为考虑删除空格是浪费时间。
答案 1 :(得分:8)
这是主观的,但在我看来,可读性在任何时候都会占用额外的空间和换行符。如果编码标准每次都要求打破字符串,我可能会疯了。
答案 2 :(得分:1)
如果您绝对必须优化空间等,请不要在源代码中执行此操作。而是通过一个自动化的中间工具。
如果我们在谈论网络,我会说这样做的额外成本对于静态内容(很少改变的脚本文件等)可能是值得的,但我会对为动态内容做这件事持怀疑态度。 / p>
在所有情况下:
在您的情况下可能不相关,但无论如何我都会提到它:完全不同的方法可能是使用紧凑的消息格式而不是查询ID,而不是每次都传输查询。
答案 3 :(得分:0)
绝对。我一直这样做。我也是:
因此,
`po` ----- becomes -----> po
因此,
postponed_operations --- becomes ---> po --- p is already taken for posts
will_be_deleted_after --- becomes ---> wi --- w is already taken for words
AS
。无论如何,所有表名都很短(规则2!)因此,
LEFT JOIN `users` AS `u` --- becomes ---> LEFT JOIN u
结果,我会把上面的查询写成:
$q='SELECT po.*,ni,lo FROM po LEFT JOIN u ON i=ui ORDER BY wi'
标签:
<强> joke
强>
答案 4 :(得分:0)
尽管删除不必要的空格和换行符确实会减少您发送到数据库服务器的数据量,但您不应该为此烦恼。
相反,你应该为代码的可读性和可维护性而烦恼。这些是编写软件代码时需要记住的两件非常重要的事情!
如果减少网络流量是唯一的好处,那么我们可以争辩说你应该为你编写的每个查询创建一个Stored Procedure。
例如。您可以更改以下查询
SELECT
`po`.*,
`u`.`nickname`,
`u`.`login`
FROM
`postponed_operations` AS `po`
LEFT JOIN `users` AS `u` ON `u`.`id` = `po`.`user_id`
ORDER BY `will_be_deleted_after`;
到
CALL GetLoginData();
现在这将减少约80-95%。但它值得吗?
绝对没有。
做这些事情宁愿让开发人员的生活变得悲惨而不会增加任何重要价值!
话虽这么说,只在没有人会改变代码的地方使用缩小版的代码。例如。你不会改变的CSS库和JS库!
我希望你明白了,你将继续编写可读和可维护的代码!