PHP Oracle 查询 select 语句在循环内速度慢

2024-04-19

我有这个 php 函数来检查数据并将其从文本文件插入数据库。

//Get All Model
$qModel = oci_parse($c1, "SELECT MODELID, MODEL_NAME FROM MEP_TBL_MODEL WHERE ACTIVE = 'Y' AND LOCATION = 'PCBA' ORDER BY MODELID ASC");
oci_execute($qModel);
while($dModel = oci_fetch_array($qModel))
{
    //Configuration
    $qDtl = oci_parse($c1, "SELECT * FROM MEP_TBL_MODEL_CONFIGURATION WHERE MODELID_FK = '" . $dModel['MODELID'] . "'");
    oci_execute($qDtl);
    while($dDtl = oci_fetch_array($qDtl))
    {
        $modelIDAccept[] = $dDtl['CONFIGURATIONID'];
        $dateCode = date($dDtl['DATE_CODE']);
        $readRowAfter = date($dDtl['READ_ROW_AFTER']);
        $createFromFormat = $dDtl['CREATE_FROM_FORMAT'];
        $ipAddress = $dDtl['IP_ADDRESS'];
        $status = $dDtl['STATUS'];

        if($dDtl['SOURCE'] != "")
        {
            $source = "\\".$dDtl['SOURCE'];
        }
        else
        {
            $source = "";
        }

        if(empty($ipAddress))
        {
            $fileAccept = file_get_contents("\\\\192.168.184.13\\Reports\\".$dModel['MODEL_NAME'].$source."\\Accept\\Accept_".$dDtl['MODEL_CODE']."_".$dateCode."_".$dDtl['TS_CODE'].".txt");

            $linesAccept = explode("\n",$fileAccept);
            $rowsintimespanAccept = 0;

            for($i = $readRowAfter; $i < count($linesAccept); $i++)
            {
                $dateobjAccept = DateTime::createFromFormat($createFromFormat, $linesAccept[$i]);

                if($dateobjAccept < $toDateTime && $dateobjAccept > $fromDateTime)
                {
                    $rowsintimespanAccept++;

                    $logDate = $dateobjAccept->format('Y-m-d H:i:s');

                    //I put select query and insert here but it so slow.
                    $qChk = oci_parse($c1, "SELECT * FROM MEP_TBL_OUTPUT_DETAILS WHERE MODELID_FK = '" . $dModel['MODELID'] . "' AND RUNNING_DATE = TO_DATE('$logDate', 'YYYY-MM-DD hh24:mi:ss') AND TS_CODE = '" . $dDtl['TS_CODE'] . "' AND SHIFT = 'Morning' AND QUANTITY_STATUS = 'OK' AND CONFIGURATIONID_FK = '" . $dDtl['CONFIGURATIONID'] . "'");
                    oci_execute($qChk);
                    if(oci_fetch($qChk) > 0)
                    {
                    }
                    else
                    {
                        $qInsert = oci_parse($c1, "INSERT INTO MEP_TBL_OUTPUT_DETAILS(MODELID_FK, RUNNING_DATE, QUANTITY_STATUS, TS_CODE, SHIFT, CONFIGURATIONID_FK) VALUES('" . $dModel['MODELID'] . "', TO_DATE('$logDate', 'YYYY-MM-DD hh24:mi:ss'), 'OK', '" . $dDtl['TS_CODE'] . "', 'Morning', '" . $dDtl['CONFIGURATIONID'] . "')");
                        oci_execute($qInsert);
                    }
                }
            }

            $totalAccept[] = $rowsintimespanAccept;
        }
    }
}

当我尝试运行代码时,加载页面的速度非常慢,有时会显示执行超时。

我的问题是,有什么方法可以使查询在循环内部或外部快速进行吗?我知道它很慢,因为当我删除 select 和 insert 查询时,加载页面只有 3-4 秒。


如果我正确地阅读了您的代码,那么您所追求的是可以在数据库上运行的单个 MERGE 语句。我不懂PHP,所以我不能告诉你它应该如何调用,但我可以给你运行的SQL语句:

MERGE INTO mep_tbl_output_details tgt
  USING (SELECT mtm.modelid,
                mtm.model_name,
                mtmc.configurationid,
                mtmc.date_code,
                mtmc.read_row_after,
                mtmc.create_from_format,
                mtmc.ip_address,
                mtmc.status,
                mtmc.ts_code
         FROM   mep_tbl_model mtm
                INNER JOIN mep_tbl_model_configuration mtmc ON mtm.modelid = mtmc.modelid_fk
         WHERE  mtm.active = 'Y'
         AND    mtm.location = 'PCBA') src
    ON (tgt.modelid_fk = src.modelid
        AND tgt.ts_code = src.ts_code
        AND tgt.configurationid_fk = src.configurationid
        AND tgt.runningdate = :log_date
        AND tgt.shift = 'Morning'
        AND tgt.quantity_status = 'OK')
WHEN NOT MATCHED THEN
  INSERT (tgt.modelid_fk, tgt.running_date, tgt.quantity_status, tgt.ts_code, tgt.shift, tgt.configuration_fk)
  VALUES (src.modelid, :log_date, 'OK', src.ts_code, 'Morning', src.configurationid);

这会执行您使用循环重新发明的连接,将其链接回您尝试插入的表,并且仅在表中尚不存在行时插入行。

您需要编写 PHP 代码来执行此操作,并将 log_date 作为绑定变量传递。

通过绑定变量,您允许数据​​库跳过硬解析(即找出执行查询的最佳方式),从而节省时间。

通过在选择更多数据并确定是否需要执行插入之前不获取数据并手动循环,您可以跳过大量上下文切换和通过网络拉/推数据。让数据库来完成繁重的工作;这就是它的设计目的!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP Oracle 查询 select 语句在循环内速度慢 的相关文章

  • PHP 5.5中的password_hash函数

    我有以下函数 可以对密码进行哈希处理并将其存储在数据库中 我正在尝试使用 php 5 5 中的password hash 函数 但它给了我奇怪的结果 function hashpass password include includes c
  • 如何在 Flex 中对 PHP 字符串使用换行符

    这是我的 MXML
  • BI Publisher 和 Excel 模板预览错误

    我正在使用 Excel 2013 并添加了 BI 发布器 我加载示例数据 并进行预览 我得到以下内容 请指教 谢谢詹姆斯 启动 Excel 预览 仅开放 false mTemplate C Users AJCENTROID AppData
  • 使用php.ini、.htaccess和zlib.output压缩js、css和php文件

    我一直在尝试使用 gzip 压缩我的网站 尽管我的服务器不允许我使用 mod deflate 所以我在这里找到了替代解决方案 http www warpconduit net 2010 10 23 enabling gzip compres
  • 使用 socket.io node.js 和传入消息的通知系统的架构实现和设计

    免责声明 我之前没有使用过node js 我以前没有使用过socket io 我正在考虑实现 Google Plus Facebook StackOverflow 风格的通知系统 我不是一个没有经验的开发人员 最终我会解决这个问题 但我只是
  • Wordpress 主题管理面板显示本地服务器中的致命错误

    我有一个 WordPress 项目 这里我们使用主题jupiter 当我在本地 XAMPP 服务器上设置它时 它的主题选项不起作用 这个问题出在我的电脑上 但在另一台电脑上却正常 My XAMPP是最新版本 它显示的错误 Fatal err
  • 根据已知字符串列表检查字符串中常见的错误识别字符

    背景 我的 MySQL 数据库中有一个由六 6 个字符组成的代码列表 它们由随机选择的数字和字母组成 它们被认为不区分大小写 但在数据库中以大写形式存储 它们可能由以下数字组成0但从来没有这封信O 我使用这些代码作为用户的一次性身份验证 问
  • echo 完整的 joomla 查询(带有限制等)?

    我想知道是否有一种方法可以用 limit 和 limitstart 等来回显完整的查询 我可以回显 query 行 但我想看看为什么限制不起作用 但我似乎无法理解它显示发送到数据库的实际查询 代码如下 params JComponentHe
  • Laravel Eloquent - 附加与同步

    有什么区别attach and sync 在 Laravel 4 的 Eloquent ORM 中 我试图环顾四周 但什么也没找到 附 处理多对多关系时插入相关模型 不需要数组参数 Example user User find 1 user
  • 是否有 NoSQL 解决方案的比较(在某些情况下哪个更好?)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我在 Linux PHP 架构中构建基于密钥的归档应用程序时 我正在尝试了解有关 NoSQL 的更多信息 谁能解释一下主要解决方案
  • 如果菜单项超过 90 个菜单项的限制,Wordpress 将删除我的菜单项 -

    我想在我的菜单中添加更多项目 我的菜单在 WordPress 菜单 管理 中至少包含 90 个项目 我想添加更多项目 但发现其他项目会自动删除 有什么解决办法吗 很有可能 但不是 100 这是 PHP 限制 而不是 WP 您可以通过查看 p
  • 如何通过csv文件仅更新sql表的一列

    我有一个 csv 文件包含一些数据 在我的 Sql 数据库中 我有一个具有多个列名的表 现在我只想通过 csv 文件更新一列 谢谢 你可以这样尝试 Import the csv file to a temp table Update you
  • 使用 php 和 jquery 的简单彗星示例

    谁能给我一个使用 PHP 的彗星技术的简单好例子 我只需要一个使用持久 HTTP 连接或类似连接的示例 我不想使用轮询技术 因为我已经设置了类似的东西 并且不仅难以使用和管理它的大量资源 另外我使用的是 IIS7 而不是 Apache 一个
  • Oracle SQL:从表中选择数据和分区名称并截断分区

    这是一个由两部分组成的问题 1 是否可以根据数据所在的分区使用 select 语句检索其名称ROWID或者其他一些标识符 eg SELECT DATA ID CATEGORY VALUE PARTITION NAME FROM MYTABL
  • PHP is_file 和服务器根相对路径

    请问如何使用 is file 和 folder file jpg 这样的路径 谢谢你 如果路径以 开头 则表示该路径是绝对路径 当路径是相对路径时 即不以 开头 则采用相对于 php 脚本的路径 如果您希望 folder file jpg
  • 插入值数组

    我有一个具有可变数量值的数组 除了内部带有查询的循环之外 是否有更有效或更好的方法将它们插入到我的数据库中 At 这个网站 http www desilva biz mysql insert html 有一个很好的 MySQL 多插入查询示
  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • 正则表达式中 (*) 和 .* 有什么区别? [复制]

    这个问题在这里已经有答案了 是任意字符零次或多次 我试图找到以元音开头的单词 我用了 aeiou 它给了我所有以元音开头的单词 当我这样做时给出相同的结果 aeiou 现在我正在寻找以元音结尾的单词 我做到了 aeiou 它没有给出任何结果
  • 让网站登录也能在 WordPress 上使用

    我使用 PHP 和 MySQL 开发了一个网站 该网站已经有登录和注册表单 myweb com 我已经在这个网址添加了 wordpressmyweb com blog 我想禁用 WordPress 上的登录和注册页面并强制用户使用我的 基本
  • 总小时数无法从 Android 插入 MySQL

    我使用以下公式获得总小时数 public void updateTotalHours int a SplitTime objMyCustomBaseAdapter getFistTime int b SplitTime objMyCusto

随机推荐

  • 套接字编程问题与recv()接收部分消息

    我有一个正在接收流股票报价数据的套接字 但是 我似乎收到了很多被截断的消息 或者看起来像是被截断的消息 这是我接收数据的方式 if numbytes recv sockfd buf MAXDATASIZE 1 0 1 perror recv
  • 两个实例具有相同的哈希码但不相等

    我正在阅读下面引用的一篇文章中的段落 题为 Java 理论与实践 哈希它 有效且正确地定义 hashCode 和 equals http www ibm com developerworks java library j jtp05273
  • 如何计算元组列表中重复项的数量?

    我有一个 python 元组列表 如下所示 listoftups A B C D E F G H A B C D 我想计算这个元组列表中重复项的数量 并希望输出如下 A gt B 2 C gt D 2 E gt F 1 G gt H 1 我
  • 如何在 Django Rest Framework 序列化器中访问通过 POST 请求发送的额外数据

    我正在尝试发送一个额外的数组POST创建组的请求 POST groups name New Group users to invite 1 2 6 我在用着Django Rest Framework s ListCreateAPIView处
  • 额外的函数/方法定义是否会增加程序的内存占用?

    在 C 中 定义不使用的附加方法或函数是否会导致更大的内存占用或更慢的执行速度 基本上 我在一个类中有几种实用程序调试方法 这些方法对于该类的正常使用都不是必需的 如果从未使用过这些定义 是否保留这些定义会在内存占用或速度方面产生影响吗 例
  • Netbeans IDE 中企业应用程序项目和 Web 项目应用程序之间的区别

    我想知道 Java EE 项目和 Java Web 项目之间的主要区别netbeansIDE 关于EJB 事实上你可以创建一个基于EJB JPA和 JavaServer Faces 中NetbeansIDE 如果你选择Java Web类别
  • 如何使用 Python 中的电子邮件模块从“application/pkcs7-mime”中提取数据?

    Problem 我正在开展一个项目 我们必须对电子邮件进行分类 对于这个项目 我需要从电子邮件及其附件中提取所有文本 我的问题是某些附件的类型为 application pkcs7 mime 我不知道如何处理这些附件 我尝试过的 impor
  • Ruby NoMethodError - BlahController 的未定义方法“blah_url”

    我从链接调用这个js function createNewTopLevelEntry var user id user val var header prompt Enter the name ajax users user id entr
  • 使用变量将值传递到filter_input()

    谁能解释一下 为什么我会收到非常奇怪的警告 filter input expects parameter 1 to be long string given 执行代码时 这是我的类的一部分 看起来非常好 public static func
  • 编码系统按1的个数排序

    我想到了一个编码系统 arr encoded code decoded code 如下 arr是小于 2 16 pow 2 16 的二进制非负整数数组 arr 0 0 each of arr 1 16 有一个 1 1 10 100 1000
  • 如何以轮子格式安装 Python 库?

    我正在寻找有关如何以轮格式安装 Python 库的教程 它看起来并不简单 所以我希望有一个简单的分步教程 说明如何为 CPython 安装名为 requests 的模块 我从以下位置下载的 https pypi python org pyp
  • ld:为 iOS 模拟器构建,但链接到 dylib?

    我在为模拟器编译应用程序时遇到问题 在设备中运行完美 但是当我尝试在模拟器中编译它时 我收到以下错误 ld building for iOS Simulator but linking against dylib built for Mac
  • MSBUILD 使用 XML 文档文件构建项目

    这应该很容易 但我无法让它发挥作用 我有一个 Web 项目 它引用我的解决方案中的另一个项目 我们称之为 Project1 这两个项目都设置为创建 XML 文档文件 当我右键单击 Web 项目并在 Visual Studio 中构建时 我的
  • 在 pyCharm 上使用张量流

    我是深度学习新手 刚刚在我的 Mac 上安装了 Tensorflow 然而 也存在一些问题 我确信我安装成功 因为我可以使用 python 3 5 在终端上运行tensorflow import tensorflow as tf node1
  • 世博会互动推送通知

    我正在尝试发送交互式推送通知Expo https expo io 我可以很好地发送普通的推送通知 甚至可以发送local交互式推送通知 但是我无法发送远程交互式推送通知 根据本节 https docs expo io versions la
  • 正则表达式仅匹配第一行?

    是否可以使正则表达式仅匹配文本的第一行 所以如果我有文字 这是第一行 这是第二行 无论第一行是什么 它都会匹配 这是第一行 这听起来更像是文件句柄缓冲区的工作 您应该能够将第一行与 m 一如既往 这是 PCRE 语法 the m修饰符使 a
  • 通过 Api 进行信用卡贷记和借记/ACH 贷记和借记,无需用户交互

    我正在寻找一种方法来自动从一张信用卡到另一张信用卡或从一个银行帐户到另一个银行帐户的转账 而最终用户无需登录贝宝或亚马逊支付之类的东西来完成该过程 通过转账 他们的在线余额到他们的银行帐户 这是对先前问题的延伸 用于直接存款的 API AC
  • 在 Swift 中将整数转换为 NSData

    在 Objective C 中 代码看起来像这样 NSInteger random arc4random uniform 99 1 NSData data NSData dataWithBytes random length sizeof
  • 100%宽度的固定div与滚动条重叠

    如此处所示 http codepen io anon pen rVPqeL http codepen io anon pen rVPqeL 我正在使用 3 个简单的 div 我想获得必须消失的 全局 滚动条的效果over标题 html是非常
  • PHP Oracle 查询 select 语句在循环内速度慢

    我有这个 php 函数来检查数据并将其从文本文件插入数据库 Get All Model qModel oci parse c1 SELECT MODELID MODEL NAME FROM MEP TBL MODEL WHERE ACTIV