在PHP中,更快;使用include('somefile.php')
或使用简单的SELECT
查询查询MySQL数据库以获取相同的信息?
例如,假设您有一个JavaScript自动填充搜索字段,需要3,000个术语才能匹配。使用include
从另一个文件读取这些术语或使用简单的SELECT
查询从MySQL数据库中读取它们是否更快?
编辑:假设我想要包含的数据库和文件与我的代码位于同一台本地计算机上。
答案 0 :(得分:14)
这取决于。如果您的文件存储在服务器本地,并且数据库安装在另一台计算机上,那么包含该文件的速度就越快。
Buuuuut,因为它取决于你的系统,它可能不是真的。我建议你制作一个PHP测试脚本并从命令行运行100次,然后通过HTTP重复测试(使用cURL)
示例:
<强> use_include.php 强>
<?php
start = microtime(true);
include( 'somefile.php' );
echo microtime(true)-start;
?>
<强> use_myphp.php 强>
<?php
start = microtime(true);
__put_here_your_mysql_statements_to_retrieve_the_file__
echo microtime(true)-start;
?>
答案 1 :(得分:4)
包含文件应该几乎总是更快。如果您的数据库位于另一台计算机上(例如,在共享主机中)或多服务器设置中,则查找必须进行额外的跳转。
然而,在实践中,差异可能并不重要。如果列表是动态的,那么将其存储在MySQL中将使您的生活更轻松。静态列表(例如国家或州)可以存储在PHP包含中。如果列表很短(几百个条目)并经常使用,你可以直接加载到JavaScript中并取消AJAX。
如果您要使用MySQL路由并担心速度,请使用缓存。
$query = $_GET['query'];
$key = 'query' . $query;
if (!$results = apc_fetch($key))
{
$statement = $db->prepare("SELECT name FROM list WHERE name LIKE :query");
$statement->bindValue(':query', "$query%");
$statement->execute();
$results = $statement->fetchAll();
apc_store($key, $results);
}
echo json_encode($results);
答案 2 :(得分:3)
时间的差异更多地取决于系统设计,而不是我敢说的基础技术。 MySQL结果和文件都可以缓存在内存中,而且性能差异很小,可以忽略不计。
相反,我会问自己维护方面的差异是什么。您是否可能更改数据?如果没有,只需将其弹出一个普通文件即可。您是否可能经常更改内容的位?如果是这样,数据库更容易操作。对于数据结构也是如此,如果需要“重组”,将数据放入数据库可能更有效吗?所以:做你觉得最方便你和代码和数据的未来维护者。 : - )
答案 3 :(得分:2)
很难/不可能给出确切的答案,因为有太多未知变量 - 如果文件系统安装在位于世界另一端的NFS上会怎样?或者你有整个MySQL数据库在内存中。还应该考虑数据库的大小。
但是,在一个更回答的问题上,一个安全的猜测是MySQL更快,给出了良好的索引,良好的数据库结构/规范化以及不太花哨/复杂的查询。 I / O操作总是很昂贵(读取:慢),而如前所述,整个数据集已经被MySQL缓存在内存中。
此外,我想你想要对那些包含文件进行进一步的字符串操作,这会让事情变得更加麻烦 - 我确信MySQL的字符串搜索算法比你在PHP中提出的要好得多。
答案 4 :(得分:1)
如果这是你定期提取的东西,那么预取数据(从磁盘或数据库,无关紧要)可能是值得的,并让你的脚本从RAM缓存中取出,如memcached
答案 5 :(得分:0)
肯定会包含在这种情况下建议使用数据库
答案 6 :(得分:0)
从文件中读取原始数据到脚本通常比从数据库读取更快。
然而,听起来您想要查询该数据以便找到匹配以返回到javascript。在这种情况下,您可能会发现MySQL对于数据的实际查询/搜索会更快(特别是如果正确索引等),因为这是数据库擅长的。
在大文件中读取的可伸缩性也较低,因为在脚本执行时将使用大量服务器内存。
答案 7 :(得分:0)
为什么不两种方式,看看哪个更快?这两种解决方案都非常简单。
答案 8 :(得分:0)
如果您希望术语的数量在以后变得更大,那么最好使用带有fulltext search字段的MySQL。
答案 9 :(得分:0)
我最近遇到过这个问题。我在mysql中有一些数据,我在每个页面请求时查询。对于我的数据集,编写固定记录长度文件比使用MySQL更快。
有一些不同的因素让我的文件比MySQL更快:
底线是我对它进行基准测试并比较结果。对于我的工作负载,文件系统更快。我怀疑如果我的数据集增长,那将会改变。我将密切关注性能,并准备好改变未来的工作方式。
答案 10 :(得分:0)
如果使用像APC或Xcache这样的PHP字节码缓存,包括文件可能会更快。如果您正在使用PHP并且想要性能,则绝对需要字节码缓存。
听起来您正在考虑在您包含的PHP脚本中保留静态数据,以避免命中数据库。你基本上做了一个基本的缓存。这可以正常工作,只要您有一些方法来刷新该文件,如果/当数据确实发生变化时。您可能还希望了解MySQL查询缓存,以便更快地对静态数据进行SQL查询。或者Memcached用于将静态数据保存在内存中。
答案 11 :(得分:-3)
我完全不知道,但在我看来,使用MySQL,即使速度较慢,如果内容是动态的,也应该使用。但是我很确定它对于大内容来说更快,使用include。