簡體   English   中英

在網站上優化SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM