性能问题-是否在额外的表或php数组中保存国家名称和其他属性?

性能问题-是否在额外的表或php数组中保存国家名称和其他属性?,php,mysql,arrays,join,attributes,Php,Mysql,Arrays,Join,Attributes,我有一个应用程序,其中性能是非常关键的问题。该应用程序有50000个用户,搜索量很大。目前,我在users表中将国家代码存储为char(2),然后从countries php数组中检索国家 $countries = array("AF"=>"Afghanistan","AL"=>"Albania",...) 我用另外6个属性做了类似的工作,所有属性都有相似数量的值。这很有用,因为不需要联接 仅就性能而言,什么会更快,要继续在数组中存储国家名称和其他属性,或使每个属性与存储每个代码名

我有一个应用程序,其中性能是非常关键的问题。该应用程序有50000个用户,搜索量很大。目前,我在users表中将国家代码存储为char(2),然后从countries php数组中检索国家

$countries = array("AF"=>"Afghanistan","AL"=>"Albania",...)
我用另外6个属性做了类似的工作,所有属性都有相似数量的值。这很有用,因为不需要联接


仅就性能而言,什么会更快,要继续在数组中存储国家名称和其他属性,或使每个属性与存储每个代码名称的另一个表联接?

将它们保留在数组中并避免联接绝对是最好的性能。

这取决于性能瓶颈在何处。如果您的数据库中有具有适当索引的好表,那么您的数据库将快速、准确地返回数据。如果是你的数据库被破坏了,那可能会产生不好的影响


另一方面,如果您的服务器的CPU周期非常繁重,并且不断达到最大值,那么让DB来处理连接。另一个需要考虑的是内存使用——一个带有国家代码的数组不是一个大的东西,而是一个数组,里面有一个产品列表,它可能会吸收一些RAM,如果你有很多并发用户,这可能不是一个好的性能。

数组更快,但是大的数据集消耗更多的内存,这在你的情况下是不正确的;)

> P>这是另一个选项,完全依赖于您的情况和您提到的另外6个值,如果该数据与国家列表一样静态,那么考虑将数据缓存在文件中。< /P>
if( some simple validation is true ){
include "EN.php" ;
}
echo $country;

从那里进入你的车。如果您打开了某种memcache(如APC),效果会更好。

这确实是正确的答案,因为这完全取决于您的环境中处理PHP和MySQL的速度,以及完成了何种缓存/优化。PHP数组在第一次运行时肯定会更快,但由于大多数MySQL服务器默认缓存查询,因此总体上可能会更快。最好的办法是自己进行基准测试(例如,使用ab)。