2011-10-19 73 views
1

雖然我在網上搜索了很多,但我還沒有完全找到答案。在PHP中,你可以通過輸入最優化的MySQL語法

echo 'This is a sentence by ',$name,' which is fast';

,而不是

優化您的輸出,例如,

echo 'This is a sentence by $name which is very inefficient';

我的基本示例代碼是

$server=english 
mysql_query("INSERT INTO uz(id,email,pw,cook) VALUES('$id','$mail','$pw','$cook')"); 

其中採用雙引號和語句中的var名稱。有沒有一種方法來優化或者它是「最好」的版本?我試過的每一個嘗試都會導致mysql錯誤。

+1

你的第二個例子是行不通的。變量只能用雙引號替換。 – konsolenfreddy

+3

除非您正在運行Facebook大小的操作,否則這些字符串之間絕對沒有區別。如果你正在運行Facebook,你可能會節省幾分鐘的CPU時間每年。 –

+1

PHP解析字符串100s納秒的時間,可能是幾微秒。 MySQL查詢=幾十到幾百毫秒(或可能幾分鐘!),取決於數據集。錯誤的結束優化。 – Damon

回答

0

如實地處理微秒;使用{}擴展字符串時,周圍的變量將保存解析器一個或兩個循環,並且在使用時還可以減少常量和關聯數組鍵之間的混淆。

比如:

$string = 'hi ' . $name . ' how are you?'; //fast 
$string = "hi $name how are you?"; //very slightly slower 
$string = "hi {$name} how are you?"; //very slightly faster than second example 

$string = 'hi ' . $person['name'] . ' how are you?'; //fast 
$string = "hi $person[name] how are you?"; //slightly slower and prone constant clashes 
$string = "hi {$person['name']} how are you?"; //very slightly faster and not prone to clashes 

與您可以遇到問題數組鍵的第二個例子,如果有什麼地方申報,因爲解釋不知道你是指兩個使用其中一個const name默認爲常量。

在數據庫方面,您可以通過在字段和表名稱周圍使用「`」來優化您的查詢,這些名稱既可以防止關鍵字衝突,也可以更快速地解釋(仍以微秒爲單位)。

比如:

mysql_query("SELECT `id`,`name`,`date` FROM `table` WHERE `id` = {$id}"); 
+1

使用逗號進行回聲確實有效。這意味着字符串首先輸出不連接,並且在輸出之前使用點連接字符串的速度稍快。請參閱手冊http:// php。net/manual/en/function.echo.php – bumperbox

+0

我每天都在學習新東西! (我從來沒有使用回聲..) – JoshHetland

+0

非常感謝你! :) –

7

沒關係。

這種優化對您的性能無任何實際影響。各種級聯方法之間的性能差異以微秒爲單位。他們根本不扮演真實世界的角色。

請使用最易讀,最符合您編碼風格的內容。

您顯示的echo示例也是如此。除非你運行100,000次(在這種情況下,你會做一些錯誤的事情無論如何),否則性能方面沒有可測量的差異。如果你願意,你可以使用microtime()做你自己的基準。

+0

+1。查詢中的鉅額費用是網絡開銷,並且等待毫秒或甚至秒以等待mysql響應 - 幾納秒的字符串插值是您最擔心的問題。 –