[英]optimize sql query on website
因此,我有一個朋友網站,我正試圖幫助他優化查詢,因為他從主持人收到一封電子郵件,表明他的網站eating
了太多資源。 因此,我在考慮這個查詢時,有沒有辦法使它更快或更聰明(消耗更少的時間或更少的內存),我不知道哪種方法是最好的方法,可能是准備好的語句或對當前代碼的改進。
$query=@mysql_query("
SELECT
tl.title,
tl.dt,
tk.nr as nr2,
tk.name as cat,
tf.name,
tf.type,
tf.alt,
tt.trupi
FROM
".$tab['news']." as tl,
".$tab['category']." as tk,
".$tab['foto']." as tf,
".$tab['entry']." as th,
".$tab['body']." as tt
WHERE
tl.nr = '$nr' AND
tl.foto = tf.nr AND
tl.kategoria = tk.nr AND
tl.hyrja = th.nr AND
tl.trupi = tt.nr");
感謝您提出的所有建議,謝謝。
首先,您可以使用ANSI 92連接語法。
結合使用兩個字母首字母縮寫詞,這將使您更清楚查詢的內容。
也許嘗試...
$nr = mysql_real_escape_string( $nr );
$tab['category'] = mysql_real_escape_string( $tab['category'] );
$tab['foto'] = mysql_real_escape_string( $tab['foto'] );
$tab['entry'] = mysql_real_escape_string( $tab['entry'] );
$tab['body'] = mysql_real_escape_string( $tab['body'] );
$query = @mysql_query("
SELECT
tl.title,
tl.dt,
tk.nr as nr2,
tk.name as cat,
tf.name,
tf.type,
tf.alt,
tt.trupi
FROM
".$tab['news']." as tl
LEFT JOIN ".$tab['category']." as tk ON ( tk.nr = tl.kategoria )
LEFT JOIN ".$tab['foto']." as tf ON ( tf.nr = tl.foto )
LEFT JOIN ".$tab['entry']." as th ON ( th.nr = tl.hyrja )
LEFT JOIN ".$tab['body']." as tt ON ( tt.nr = tl.trupi )
WHERE
tl.nr = '$nr'");
在SQL字符串中使用變量之前,請注意變量的轉義(請參閱Bobby Tables 。)
要記住的另一件事是數據庫的整體設計。 如果表之間存在“一對一”關系的實例,則應將這兩個表折疊為一個表,依此類推。
無需使用每個表,也可以使用Explain
來檢查查詢的最佳狀態,您可以在此處找到很好的指南http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing -MySQL-Queries-and-Indexes.htm關於如何解釋解釋的結果
向查詢添加的所有操作都會以一種或多種方式降低性能,但是我認為瓶頸是聯接本身以及關聯表的方式。 將一個表與另一個表相關聯時,請嘗試使用integers(ids);如果這不可能,請確保對與之相關的列進行索引。 肯定會增加您的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.