【问题标题】:optimize sql query on website优化网站上的sql查询
【发布时间】:2012-09-11 18:57:01
【问题描述】:

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

感谢您的所有建议, 谢谢。

【问题讨论】:

  • 很难说没有看到架构的描述。

标签: php mysql sql optimization


【解决方案1】:

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

结合去掉两个字母的首字母缩写词,这样可以更清楚地了解您的查询在做什么。

【讨论】:

    【解决方案2】:

    也许可以试试……

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

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

    【讨论】:

      【解决方案3】:

      无需对每个表都使用 as,还可以使用 Explain 检查您的查询的优化程度,您可以在 http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm 找到一个很好的指南,了解如何解释解释的结果

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        • 2013-01-10
        • 2014-02-04
        相关资源
        最近更新 更多