PHP/MYSQL排名代码导致加载页面PHP/MYSQL缓慢

PHP/MYSQL排名代码导致加载页面PHP/MYSQL缓慢,php,mysql,Php,Mysql,我有一个测试页面运行#-标记趋势分析,它存储在我的数据库中。在显示内容之前,加载页面需要很长时间(最多2分钟),该页面仅使用了一个函数 网址: 如何调整语句以缩短页面加载时间 这是我的代码: <?php require_once("dbconnect.php"); require_once("lib_isarabic.php"); $query = "SELECT COUNT( * ) cnt, hashtags FROM tweets WHERE tweeted_at >=

我有一个测试页面运行#-标记趋势分析,它存储在我的数据库中。在显示内容之前,加载页面需要很长时间(最多2分钟),该页面仅使用了一个函数

网址:

如何调整语句以缩短页面加载时间

这是我的代码:

<?php 

require_once("dbconnect.php");
require_once("lib_isarabic.php");

$query = "SELECT COUNT( * ) cnt, hashtags
FROM  tweets
WHERE tweeted_at >= DATE_SUB( NOW( ) , INTERVAL 2 DAY ) 
AND hashtags !=  ''
GROUP BY hashtags
ORDER BY cnt DESC LIMIT 100";

$res = mysql_query($query);

while($row = mysql_fetch_assoc($res) ) {

    $count = $row['cnt'];
    $hashtags = explode( " ", $row['hashtags'] );

    foreach($hashtags as $hashtag ) {
        if( strtolower($hashtag) != 'sudan' && strtolower($hashtag) != 'new' && strtolower($hashtag) != 'new' )     
            if( is_arabic($hashtag) ) 
                $topics_ara[strtolower( trim($hashtag) )] += $count;            
            else    
                $topics_eng[strtolower( trim($hashtag) )] += $count;        

    }
}

array_multisort($topics_ara, SORT_DESC);
array_multisort($topics_eng, SORT_DESC);

$index = 0;
foreach($topics_eng as $key=>$value) {

    $query = "SELECT count(*) cnt FROM ( 
            SELECT count(*), tweeted_by FROM tweets
            WHERE hashtags like '%$key%'
                      AND tweeted_at >= DATE_SUB( NOW( ) , INTERVAL 2 DAY ) 
            GROUP BY tweeted_by 
             ) AS T";


/*              $query = "
            SELECT count(*) FROM tweets
            WHERE hashtags like '%$key%'
                      AND tweeted_at > DATE_SUB( NOW( ) , INTERVAL 1 DAY ) ";
*/

        $res = mysql_query($query);               
        $row = mysql_fetch_assoc($res);

        if($row['cnt'] > 1) {

        $index++;
        if($key != "" ) {
            $trending_eng[$key] = $value;
        }
    }

    if($index > 30) 
        break;
}


$index = 0;
foreach($topics_ara as $key=>$value) {

    $query = "SELECT count(*) cnt FROM ( 
            SELECT count(*), tweeted_by FROM tweets
            WHERE hashtags like '%$key%'
                      AND tweeted_at >= DATE_SUB( NOW( ) , INTERVAL 2 DAY ) 
            GROUP BY tweeted_by 
             ) AS T";
        $res = mysql_query($query);
        $row = mysql_fetch_assoc($res);

        if($row['cnt'] > 1) {

        $index++;
        if($key != "" ) {
            $trending_ara[$key] = $value;
        }
    }

    if($index > 30) 
        break;
}


 //var_dump($trending_eng) ;
 //var_dump($trending_ara) ;

?> 

很抱歉,您的数据模型有缺陷

您不规范tweet,而是对hashtags进行全文搜索(通过“%$key%”
等hashtags),这意味着时间间隔内所有tweet的完整文本都必须通过CPU密集型流程运行—不仅是一次,而且要通过两次
foreach()
循环,每次循环30次

所以你要做60次全文扫描-祝你好运


正确的方法是在收到tweet时将其取消,拆分hashtag并创建一个类似于
hashtag | user | count

对不起,您的数据模型有缺陷

您不规范tweet,而是对hashtags进行全文搜索(通过“%$key%”等hashtags),这意味着时间间隔内所有tweet的完整文本都必须通过CPU密集型流程运行—不仅是一次,而且要通过两次
foreach()
循环,每次循环30次

所以你要做60次全文扫描-祝你好运


正确的方法是在接收推文时将推文禁用,拆分哈希标记并创建一个类似于
hashtag | user | count

的表。请不要对新代码使用
mysql*
函数。它们不再得到维护,社区已开始恢复。看到了吗?相反,你应该学习并使用或。如果你不能决定,将帮助你做出选择。如果你想学习。然后问一些具体的问题。@Truth-感谢您发布PDO教程;我在给使用mysql的人的评论中也提到了这一点。@pythonscript:@Truth-太棒了!我会记下那个页面。请不要用
mysql.*
函数来编写新代码。它们不再得到维护,社区已开始恢复。看到了吗?相反,你应该学习并使用或。如果你不能决定,将帮助你做出选择。如果你想学习。然后问一些具体的问题。@Truth-感谢您发布PDO教程;我在给使用mysql的人的评论中也提到了这一点。@pythonscript:@Truth-太棒了!我会记下那个页面。谢谢Eugen,看起来我会重新建模我的表格和代码谢谢你的提示,Eugen,看起来我会重新建模我的表格和代码谢谢你的提示