【问题标题】:How do I control retrieving data from tables in a database如何控制从数据库中的表中检索数据
【发布时间】:2010-05-13 10:56:58
【问题描述】:

我在单个数据库中有多个表。当我的页面加载时,它会从该数据库中的所有表中检索数据。因此,由于不同表中的加载时间不同,我的页面变慢了。我的问题是如何显示已经从表中加载的数据的页面,而其余部分处于流模式?不知道 php 和 MySQL 是否可行?有什么想法吗?

谢谢

马修

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    从不同的表中获取数据并没有什么不好。每个网站都这样做。
    如果您的某些查询变慢,您只需要找出哪个查询然后优化它。

    您可以使用以下简单代码找出慢速查询: 只需在每次查询执行之前和之后放置这些 $TIMER 语句

    <?
    $TIMER['start']=microtime(TRUE);
    // some code
    $query="SELECT ...";
    $TIMER['before q1']=microtime(TRUE);
      $res=mysql_query($query);
    $TIMER['after q1']=microtime(TRUE); 
      while ($row = mysql_fetch_array($res)) {
    // some code
      }
    $TIMER['before q2']=microtime(TRUE);
      $res=mysql_query($query);
    $TIMER['after q2']=microtime(TRUE); 
      while ($row = mysql_fetch_array($res)) {
    // some code
      }
    $TIMER['array filled']=microtime(TRUE); 
    // some code
    $TIMER['pagination']=microtime(TRUE); 
    
    if ('127.0.0.1' === $_SERVER['REMOTE_ADDR']) { //put your IP addr here
      echo "<table border=1><tr><td>name</td><td>so far</td><td>delta</td><td>per cent</td></tr>";
      reset($TIMER);
      $start=$prev=current($TIMER);
      $total=end($TIMER)-$start;
      foreach($TIMER as $name => $value) {
        $sofar=round($value-$start,3);
        $delta=round($value-$prev,3);
        $percent=round($delta/$total*100);
        echo "<tr><td>$name</td><td>$sofar</td><td>$delta</td><td>$percent</td></tr>";
        $prev=$value;
      }
        echo "</table><>";
    }
    ?>
    

    【讨论】:

    • 感谢您的回复。我会检查哪个变慢了....但我的另一个问题是每个表都有更新日期。所以对于一个查询,一些表有即时数据,而另一些则从网络更新。所以这些差异将会存在。这就是为什么要求延迟加载那些处于更新过程中的表的数据。
    • @mathew 如果某些插入操作会降低您的数据库速度,您还必须优化这些更新查询。虽然“从网络更新数据库”听起来很奇怪
    • 对我来说,优化表以从大型数据库中获取结果似乎非常困难。你有任何链接或任何教程,我可以做一些学习曲线吗?或任何帮助表示赞赏
    • @mathew 你可以把慢查询带到这里寻求帮助
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2023-03-15
    • 2013-06-28
    • 2021-10-26
    • 2013-10-31
    • 2016-11-27
    • 2016-03-17
    • 2015-12-03
    相关资源
    最近更新 更多