php从数据库获取数据会减慢页面的速度

时间:2012-12-06 04:46:47

标签: php mysql hang

我在Windows上使用wamp服务器。从我的数据库中获取一些数据会严重挂起我的页面。它就像一个简单的帖子,有1个图像1标题和一点点描述,当我触发命令时,它会严重挂起我的页面。这是我的代码的样子。

    <?php
    //1. Create a connection
    $connection= mysql_connect("localhost","root","");
    if(!$connection){
        die("Database Connection Failed :" . mysql_error());
    }

    //2 Select a database to use
    $db_select = mysql_select_db("gat", $connection);
    if (!$db_select) {
        die("Database selection failed: " . mysql_error());
    }

    ?>
<html>
<head>
    <title>Database Check</title>
</head>
<body>
    <?php 
        //3 perform database query
        $result=mysql_query("SELECT * FROM recent_works",$connection);
        if (!$result) {
            die("Database query failed:" . mysql_error());
        }

        //4 use returned data 
        while ($row= mysql_fetch_assoc($result)) {  
            echo "<div class='work_item'>";
            echo "<img src='{$row['image']}' alt=''>";
            echo "<h2>{$row['title']}</h2>";
            echo "<p>{$row['short_discription']}</p>";
            echo "</div>";
        }
     ?>
</body>
</html>
<?php 
    //5 close connection
    mysql_close($connection);
 ?>

1 个答案:

答案 0 :(得分:1)

从数据库中获取数据总是会涉及某种程度的阻止。问题是你获取了多少数据。您的示例表明您正在从表中选择所有内容并获取所有数据以打印到页面上。因此,表中有多少行,每列中存储了多少数据,以及这些数据传输到客户端的数量都是速度的供应因素。此外,您必须考虑连接到数据库也有成本。

以下是我可以对上述代码提出的一些建议:

  1. 不要使用旧的mysql扩展(mysql_ *函数),但考虑使用较新的MySQLi扩展,它可以帮助你做旧扩展不能做的事情;比如asynchronous queries。在新开发中使用旧的mysql扩展也是非常气馁,因为它目前正在计划弃用。有关详细信息,请参阅PHP手册中的MySQL: choosing an API
  2. 检查phpinfo()以确保您没有使用output buffering(这需要在将一定数量的数据发送到客户端之前缓冲)。这可能导致客户端等待,直到准备好发送数据。尽快将一些HTML内容推送到客户端有助于改善用户体验。
  3. 请勿在查询中使用SELECT * FROM table,而应考虑明确仅选择每个查询所需的字段:SELECT image,title,short_discription FROM recent_works
  4. 如果有大量数据(可能超过100行),请考虑使用分页LIMIT查询到每页视图的特定行数。这可以基于每个请求大大减少DBM和PHP之间的流量。
  5. 如果是高负荷网站,请考虑使用persistent database connection