哪些选项更优化?
在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 举报,一经查实,本站将立刻删除。