微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PHP中扼杀与在MySQL中的内爆 – 使用更少的CPU?

哪些选项更优化?

MySQL中爆发

$rsFriends = $cnn->Execute('SELECT CAST(GROUP_CONCAT(id_friend) AS CHAR) AS friends 
                              FROM table_friend 
                             WHERE id_user = '.q($_SESSION['id_user']));
$friends = $rsFriends->fields['friends'];
echo $friends;

PHP中爆发

$rsFriends = $cnn->Execute('SELECT id_friend 
                              FROM table_friend 
                             WHERE id_user = '.q($_SESSION['id_user']));
while(!$rsFriends->EOF) {
    $friends[] = $rsFriends->fields['id_friend'];
    $rsFriends->MoveNext();
}
echo implode(',',$friends);

解决方法:

您应该知道正确的(“最佳”)选择将成为许多变量的一个因素:

>您的数据库和应用程序硬件.
>您的数据大小
>数据库和应用程序服务器上的负载是什么样的.
>索引和可能影响数据集上的查询执行计划的其他内容
>您实际上想要如何使用数据.
>应用服务器和数据库服务器之间的网络延迟

但是你绝对可以分析程序流程来帮助你得到答案:

PHP中进行Imploding:

>执行返回所有朋友ID的选择查询
>将每个ID返回给您的应用程序.
>在从结果中读取字符串时,在PHP中构建字符串.

优点:

>如果您确实需要原始ID,那么灵活使用原始ID(意思是 – 如果您在MysqL中创建字符串,但是在PHP中对其进行后处理,那么昂贵的后处理操作可能会抵消绕过PHP中的字符串所带来的好处 – 编制阶段)
> ID可以(是?)作为数字返回到您的应用程序,而不是字符串(1234567890是10字节ASCII,4字节作为32位整数)

MysqL中出现问题:

>执行聚合查询
>在聚合结果时构建字符串
>将一个字符串返回给您的应用程序
>输出该字符串

优点:

>对于大型数据集,可能会在数据库服务器上使用更少的内存
>想不出别的.只要你需要一个大的连接字符串,这个解决方案肯定是次优的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐