优化网站上的SQL查询

时间:2012-09-11 10:25:38

标签: php mysql sql optimization

所以我有 一个朋友网站,我正在努力帮助他优化查询 因为他收到了来自主持人的电子邮件,他的网站也是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");

我很感激你的所有建议, 谢谢。

3 个答案:

答案 0 :(得分:2)

首先,您可以使用ANSI 92连接语法。

结合删除两个字母的首字母缩略词,这样可以使您的查询更清晰。

答案 1 :(得分:1)

也许试试......

$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。)

要记住的另一件事是整个数据库的设计。如果表之间存在“一对一”关系的任何实例,则应将这两个表折叠为单个表等。

答案 2 :(得分:0)

无需使用每个表格,也可以使用Explain来检查查询的最佳效果,您可以在此处找到一个很好的指南http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm,了解如何解释解释的结果< / p>

查询的所有添加操作都会以某种方式降低性能,但我认为瓶颈是连接本身以及关联表的方式。在将一个表与另一个表相关联时尝试使用整数(ids),如果不可能,请确保将与之相关的列编入索引。这肯定会增加你的查询。