【问题标题】:PHP: Simultaneously Query Multiple Databases To Improve Load TimePHP:同时查询多个数据库以缩短加载时间
【发布时间】:2015-11-28 12:46:55
【问题描述】:

所有,我有一个网页,它从 4 个 Oracle 数据库中的 4-6 个表中加载数据,每个需要大约 10 个模式。我设置的是页面顶部的要求,例如:

<?php
require_once('src/connects_client1.php');
require_once('src/connects_client2.php');
require_once('src/connects_client3.php');
require_once('src/connects_client4.php');
?>

每个文件都包含一个连接字符串,例如:

$connClient = oci_pconnect("Login", "Password", "//database:1521");

以及一系列查询和执行如:

$dailystatusClientSCHEMA = oci_parse($connClient, 'select * from OPS$SCHEMA.DAILY_STATUS order by table_name');

oci_execute($dailystatusClientSCHEMA);

这是基于 Jquery 的树视图的一部分,其中包含一系列无序列表和一个 PHP foreach 循环,该循环为查询结果适当地打印每一行数据。

一些结果集包含超过一千行数据。这有效,并以可用的格式显示数据。

问题是加载需要 1 分 52 秒。公司的最终用户认为这太长了,坦率地说我也认为太长了。我不是网络开发人员,但这个项目属于我们的团队是最合乎逻辑的,所以我在这里。

有什么方法可以强制所有查询以更同步的方式加载,以便更快地返回数据?这是一个非常快的 Exadata 环境,所以我不认为数据库存在任何瓶颈,并且 Web 服务器在任何给定时间负载都很轻,所以我认为那里没有限制,只是在我的构建方式上这个页面。

我非常感谢可能提供的任何解决方案。

谢谢。

【问题讨论】:

  • 也许可以对脚本的不同部分进行基准测试,从查询到页面中的任何其他内容,以找出瓶颈所在。它可能是查询、拉取结果集,甚至只是等待 jquery 数据表加载数据。查询数据,将其保存到会话并通过客户端通过 ajax 进行分页可能会更快。不管怎样,第一件事是使用微时间进行基准测试,以找出导致瓶颈的原因并专注于此。

标签: php jquery html oracle oracle-call-interface


【解决方案1】:

select * 存在瓶颈,尝试将其更改为您真正感兴趣的字段。

RDBS 必须确定要返回的字段、它们的名称和数据类型以及如何分配内存。通过使用命名字段,RDBS 不必计算出您正在查询的表中存在哪些字段。

【讨论】:

  • 我会试一试,尽管通过我所有的研究,我发现的一切都表明不要使用 select * 以可能改变表结构,但在查询选择特定列与 *
  • 更新:是的,加载时间基本上保持不变,事实上,根据我的秒表,它实际上加载得更慢。也就是说,我感谢您的反馈,并很高兴我已将查询重写为不被选中 *
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 2014-03-06
  • 2016-08-23
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多