Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多数据库查询性能_Php_Database_Performance_Sqlite - Fatal编程技术网

Php 多数据库查询性能

Php 多数据库查询性能,php,database,performance,sqlite,Php,Database,Performance,Sqlite,假设有一个SQLite数据库,它有两个表,“users”和“ranks”,一个表保存用户名和它们的排名作为一个数字(和userid),另一个表保存相同的排名数字和排名名称。目标是输出一个包含列组名称和用户名(及其userid)的html表 这段代码在小范围内工作得非常好,问题是一旦数据库高度填充,它的性能如何。本质上,它为第一个查询的每个输出行向数据库发出一个新请求,对吗?我添加了$data的用法,而不是一行一行地回显,以防它会以某种方式减少沿途的某个地方的请求,但我不确定它是否会产生任何积

假设有一个SQLite数据库,它有两个表,“users”和“ranks”,一个表保存用户名和它们的排名作为一个数字(和userid),另一个表保存相同的排名数字和排名名称。目标是输出一个包含列组名称和用户名(及其userid)的html表


这段代码在小范围内工作得非常好,问题是一旦数据库高度填充,它的性能如何。本质上,它为第一个查询的每个输出行向数据库发出一个新请求,对吗?我添加了$data的用法,而不是一行一行地回显,以防它会以某种方式减少沿途的某个地方的请求,但我不确定它是否会产生任何积极的影响。我对数据库处理和php太缺乏经验,不知道这段代码会给服务器和/或网络带来多大的压力,而不是简单地并排执行两个查询,我的代码基本上会执行成百上千的数据库请求吗?这会如何影响性能?另外,如果情况不好,我能做些什么?是否有任何不同的方法可以在没有性能问题的情况下实现相同的结果


更重要的是,如果我还将用户名替换为来自完全不同的非SQLite(MySQL)数据库的displayname,会怎么样?201个查询显示100个用户,这是否意味着资源使用量成倍增加?

一般来说,发出查询是一项代价高昂的操作-它涉及数据库方面的大量工作(解析、语法检查、权限检查、构造执行计划、磁盘I/O、进出数据库的网络流量等)

当然,没有规则是100%防弹的,您应该始终对特定用例进行基准测试,但在大多数情况下,执行单个“大”查询要比执行N个“小”查询好得多。在您的用例中,您可以使用
join
语法在单个查询中获得所需的所有结果:

SELECT   users.*, ranks.rankname
FROM     users 
JOIN     ranks ON users.rank = ranks.ranknumber
ORDER BY users.rank DESC

听起来像是“加入”的工作。如果您还不熟悉SQL联接,这里有一个很好的教程:。至于“效率”:您通常希望尽可能少地进行查询。因此,建议使用一个连接。@ PaulsM4加入了这个技巧,就像一个魅力,就像我所有的数据都在一张桌子上,谢谢!哇,SQL查询在表面上是一个如此古老且易于使用的功能,我不认为它实际上是一个如此繁重的操作。。。然后,我的“查询选项”对另一个查询的每个结果执行查询将是一个非常糟糕的主意,这是我所害怕的,也是回答问题的方法,谢谢。另外,JOIN为我在同一个数据库中的两个表做了一些技巧,我现在正试图找出如何连接另一个数据库用于我的查询,非常感谢,你让我的日子过得更好,我希望你也过得愉快
SELECT   users.*, ranks.rankname
FROM     users 
JOIN     ranks ON users.rank = ranks.ranknumber
ORDER BY users.rank DESC