什么更快:MySQL LEFT(*,100)还是PHP substr()?

Joh*_*lia 8 php mysql

我正在构建数据库中最近10个更新页面的简单列表.我需要显示的每条记录:名称和缩写/截断的描述,存储为TEXT.有些页面的描述可能超过10,000个字符.

哪种速度和性能更好?或者更好的方法来解决这个问题?我同时使用Zend和Smarty.

MySQL的

SELECT id, name, LEFT(description, 100) FROM pages ORDER BY page_modified DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

PHP

function ShortenText($text) {
// Change to the number of characters you want to display        
$chars = 100;        
$text = $text." "; 
$text = substr($text,0,$chars);
$text = substr($text,0,strrpos($text,' '));
$text = $text."...";        
return $text; 
}
Run Code Online (Sandbox Code Playgroud)

小智 15

因为你的问题特别"更快"而不是"更好",我可以肯定地说,在DB中执行计算实际上更快."更好"是一个非常不同的问题,根据用例,@ Graydot的建议在某些情况下可能会更好.

让应用程序服务器在不需要时编组数据的概念与专门化的想法不一致.数据库专门用于检索数据和对数据执行大量计算; 这就是他们最擅长的.应用程序服务器旨在协调持久性,业务逻辑和用户界面之间的流程.

你会在SQL语句中使用sum(),还是将所有值都检索到你的应用服务器中,然后循环并添加它们?绝对,在DB中执行总和更快......请记住,应用程序服务器实际上是数据库的客户端.如果您将所有数据撤回到应用程序服务器进行运算,那么您将通过网络(甚至只是跨越RAM段)发送不需要移动的数据字节...并且所有数据都通过数据库驱动程序进行有很多小代码的东西触摸和移动数据.

但是还有"更好"的问题,这是特定于问题的...如果你有需要行级数据,或客户端过滤和重新求和的要求(或让用户指定他们想要看到多少左角鲨鱼在结果集中),然后在应用服务器中执行它可能是有意义的,因此您不必继续返回数据库.

你特意问"更快",答案是"数据库" - 但"整体更快"可能意味着别的东西,"整体更好"完全是别的东西.像往常一样,事实是模糊的,几乎所有事情的答案都是"这取决于"

乔恩


gbn*_*gbn 5

LEFT在数据库中.

  • 发送回客户端的数据较少(在这种情况下少得多,最多1k对100k文本)
  • 与实际的表访问,ORDER BY等相比,这是微不足道的

它也没有违反任何规则,例如"客户端格式化":这只是常识

编辑:看起来我们正在酝酿宗教战争.

如果问题要求复杂的字符串操作或格式化或非聚合计算,那么我会说使用php.这不是这些情况.

无法优化的一件事是网络与db +客户端代码相比.