Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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 SQL 1查询返回3列,或3个查询返回1列,实际上对速度有影响吗?_Php_Sql_Oracle - Fatal编程技术网

Php SQL 1查询返回3列,或3个查询返回1列,实际上对速度有影响吗?

Php SQL 1查询返回3列,或3个查询返回1列,实际上对速度有影响吗?,php,sql,oracle,Php,Sql,Oracle,我想知道一些事情。我建立了一个大量使用PHP和SQL Oracle的网站 如果执行一个查询返回多个列,然后执行多个查询返回一个列,是否会对速度产生影响 实例 一个查询应该更快。解析查询、搜索表以及将结果返回给客户机都会带来很大的查询开销。如果所有值都来自同一行,那么如果将它们组合到一个查询中,则只能执行一次。是的,有 这3个单独的查询肯定会在网络上运行3次,因此会导致3倍的网络流量 它们也不同,因此不会使用查询缓存。您最好在所有3个查询中请求所有3列,但这样代码看起来会很奇怪,不是吗 它们也可能

我想知道一些事情。我建立了一个大量使用PHP和SQL Oracle的网站

如果执行一个查询返回多个列,然后执行多个查询返回一个列,是否会对速度产生影响

实例
一个查询应该更快。解析查询、搜索表以及将结果返回给客户机都会带来很大的查询开销。如果所有值都来自同一行,那么如果将它们组合到一个查询中,则只能执行一次。

是的,有

这3个单独的查询肯定会在网络上运行3次,因此会导致3倍的网络流量 它们也不同,因此不会使用查询缓存。您最好在所有3个查询中请求所有3列,但这样代码看起来会很奇怪,不是吗 它们也可能命中磁盘3次,尽管我希望相同的数据已经被缓冲。当然,缓冲器可能会受到压力。如果查询是联接或更复杂的查询,则肯定会出现这种情况 代码的可读性也不太好——只是更多的字符,而且不清楚是否使用了同一行数据。 如果您已经收集了最新的统计数据,并且在适当的位置具有所需的索引,请遵循规范化规则。那么,我的朋友,现在就使用一个SQL,不要再担心性能了

如果您确实遇到任何性能问题,请发布执行计划,并在此基础上提供进一步建议

如果您想要一个ROT,即经验法则,那么一个查询要比多个查询分割来完成同一任务要好

注意:性能调优是关于基数的。基数不是关于列的数量,而是关于行的数量


更新:记住,SQL和PL/SQL之间有巨大的区别。大多数情况下,前端应用程序调用PL/SQL程序,上下文切换加起来就是执行时间。

3个查询=3次到数据库的往返,3次通过SQL解析器,诸如此类。一个包含三个字段的查询效率要高得多。谢谢。那么,我应该在页面顶部执行所有查询,然后在整个页面中使用变量吗?还有比这更好的实践吗?使用MVC模型设置是您建议的更正式的方法,但原则上,是的,这是最佳实践。@user3973427它不必在页面顶部,可以在使用变量之前。无论哪种方式,都应该避免重复查询。考虑到数据库的每一次调用可能是最慢的事情,除了Web API。
Customer Name:     <?= dbq("select customer_name from customers where customer_no = $session"); ?>
Customer No:       <?= dbq("select customer_no from customers where customer_no = $session"); ?>
Customer Type:     <?= dbq("select customer_type from customers where customer_no = $session"); ?>
Customer Name:     $row1
Customer No:       $row2
Customer Type:     $row3