PHP mysqli_multi_query 大插入问题

2024-04-22

我尝试了很多方法试图插入从文本文件解析的大量数据(在我的服务器上大约 2 秒内将 200,000 行文本解析到数组中,所以我知道这部分不是问题)。我使用的 mysqli_multi_query 以 5,000 块为单位发送查询(出于某种原因,如果我想多次使用 multi_query,它会拒绝执行更大的操作),或者如果我将文本文件拆分为 50,000 行左右,我可以将它们全部插入2秒内立即。如果我这样做,那么它拒绝运行另一个查询(我确实读过我需要执行 while (mysqli_more_results($db) && mysqli_next_result($db)); 来清除结果,并且我确实有 5,000 个拆分的查询)

50,000 条插入在 2 秒内运行,5,000 条插入(50,000 行)需要 40 秒,我有点想在 foreach 中创建一个新的 mysqli 连接(用于 50,000 条插入),但并不总是如此工作...

我想要一些关于如何让我的函数运行得更快的提示,因为当我正在读取的文件可能包含几十万可能数百万行时,从 40 秒插入所有 50,000 条需要永远

function log2db(){
$db = mysqli_connect(SQLHOST, SQLUSER, SQLPASS, SQLDB);
if($db){
    $qar = logparse("world2.chat", loglen());
    $query = "";
    $i = 0;
    foreach($qar['data'] as $q){
        $i++;
        $uid = $q['uid'];
        $type = $q['type'];
        $chldst = $q['chldst'];
        $time = $q['date'];
        $msg = $q['msg'];
        $query .= "insert into `messages` (`uid`, `type`, `chldst`, `time`, `message`) values ('$uid', '$type', '$chldst', '$time', '$msg');\n";
        if(!($i % 5000)){
            $qquery[] = $query;
            $query = "";
        }
    }
    $qquery[] = $query;
    foreach($qquery as $qq){
        $q = mysqli_multi_query($db, $qq);
        if($q){
            while (mysqli_more_results($db) && mysqli_next_result($db));
        } else {
            mysqli_error($db);
            return false;
        }
    }
    if($qar !== null){
        loglen($qar['filelen']);
    }
    return true;
}
return false;

}

我想出的办法(总是有效,但就像我说的很慢),有什么关于如何改进它的建议吗?


您确实意识到 INSERT INTO 查询可以在一个single query?

$parts  = array();

foreach($qar['data'] as $q){

    $uid    = $q['uid'];
    $type   = $q['type'];
    $chldst = $q['chldst'];
    $time   = $q['date'];
    $msg    = $q['msg'];

    $parts[] = "('$uid', '$type', '$chldst', '$time', '$msg')";
 }

$query  = "INSERT INTO `messages` (`uid`, `type`, `chldst`, `time`, `message`)";
$query .= "VALUES ".implode(', ', $parts);

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

PHP mysqli_multi_query 大插入问题 的相关文章

  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • Smarty输出空白页

    已解决 模板文件错误 我有这样的 Smarty 设置 require once smarty Smarty class php smarty new Smarty smarty gt compile dir compile dir smar
  • 如何复制 ArrayIterator 以保留其当前迭代位置?

    因为这似乎是我必须做的才能达到这种效果 arr a gt first b gt second iter new ArrayIterator arr Do a bunch of iterations iter gt next new iter
  • SMTP 配置在生产中不起作用

    我正在尝试在提交表单时发送电子邮件 我正在使用 PHPMailer 使用以下配置发送邮件 mail new PHPMailer mail gt isSMTP mail gt Host mail example in mail gt Port
  • 在值中包含换行符

    我有一个 Word 模板 其中 php 代码中定义了值 在PHP代码中 document gt setValue Value1 value1 在word模板中 Value1 如何将包含两个值之间的断线的值包含在单词的值中 Replace n
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 如何通过php的require()或include()函数传递变量?

    当我使用这个时 require diggstyle code php page page no 警告是 无法打开流 第 198 行 C xampp htdocs 4ajax gallery core php 中没有错误 错误是 Failed
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • Magento - 检查 cms 页面

    我想通过 php 检查页面是否是 Magento 中的 cms page 我需要不同的 cms 页面面包屑 所以我尝试在一个条件下做到这一点 但我不知道如何或在哪里查看 到目前为止 这是我的 breadcrumbs phtml p some
  • PHP Solr PECL 扩展安装

    我已经使用命令安装了 pecl solr pecl install solr 和梨使用 wget http pear php net go pear phar php go pear phar 重启Apache后 我仍然收到错误 Fatal
  • WordPress 分页自定义帖子类型

    我有一个名为 新闻 的页面 使用页面模板page newslist php 它应该显示来自自定义帖子类型 也称为新闻 的帖子 我意识到两者具有相同的名称会导致问题 因此在注册自定义帖子类型时 我进行了重写以将其与页面区分开来 rewrite
  • 使用 XSLT 将 XML 转换为 SQL

    由于我无法控制的原因 我将获得一个 XML 文件和一个 XSLT 文件 该文件可以将 XML 文件转换为 SQL 代码或错误 现在让我们假设我们可以信任提供 XML 文件的人不会在 XML 中包含危险的构造 我什至不知道是否应该使用 Sim
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 检查条件并通过 Zend 中的 Regex 识别 url 中的模式

    我正在实现 Zend Regex 路由 并且必须对 url 执行多次检查 例如 如果这是我的网址 http localhost application public index php module controller action 这是
  • 从数据库填充复选框

    我有两个表 第一个由与名称关联的 id 组成 1 汽车 2 火车 3 普通 ETC 第二个表由两个字段 user id 和第一个表中的 id 组成 例如 1 1 2 1 3 当用户转到该页面时 我试图重新填充选定的复选框 首先 您查询数据库
  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中

随机推荐

  • 如何在 jQuery UI 中将多个可排序列表相互连接?

    我是 jQuery 新手 并且在使用 jQuery UI 时遇到了很大的困难sortable 我正在尝试整理一个页面以方便对项目进行分组和排序 我的页面有一个组列表 每个组都包含一个项目列表 我希望允许用户能够执行以下操作 重新排序组 对组
  • 在不知道键的情况下快速引用字典键和值

    我有一个字典数组定义为 var users String String 数组内的字典是一个简单的用户名 是 否标志 第一个用户 Y 第二个用户 N 第三个用户 N 在我的 TableView 单元格配置中 我定义了 let userReco
  • 浏览器和服务器在实践中是否使用 HTTP 内容协商?

    我正在学习关于HTTP内容协商 https developer mozilla org en US docs Web HTTP Content negotiation眼下 我已经了解客户端和服务器能够协商所请求内容的表示的基本方式 但我不知
  • 热点 JVM 字节码解释器是跟踪 JIT 吗?

    这个问题几乎说明了一切 我一直在寻找答案 甚至通过 VM 规范 但我没有明确说明 No 不过 还有一些其他 JVM 具有跟踪 JIT HotPath http HotPath GoogleCode Com and Maxine http L
  • 通过 jQuery tiny PubSub 传递数组

    jQuery 微型 PubSub https gist github com 661855在传递原始值或对象时非常有用 但在传递数组时会遇到一些问题 所以我必须将数组包装成一个对象 function var o subscribe func
  • JTable TableCellRenderer背景与Nimbus LookAndFeel颜色问题

    我正在使用 NimbusLookAndFeel 通过这种外观和感觉 JTable 的单元格背景可以是白色和浅灰色 这取决于行号 现在 我正在编写一些实现 TableCellRenderer 的自定义单元格渲染器 我需要根据 JTable 中
  • PHP 循环遍历表单值

    我有一个表单 提交了许多小字段 我需要循环遍历这些字段并对其执行操作 表格如下所示
  • 在 GoogleTest 中使用 ASSERT 和 EXPECT

    当 ASSERT 宏导致测试用例终止时 EXPECT 宏继续其评估 我想知道决定是否使用其中之一的标准是什么 Use ASSERT当条件must保持 如果没有 测试就在那里停止 当测试的其余部分在不满足此条件的情况下不具有语义意义时 请使用
  • 在使用 libstdc++ 进行调试期间强制使用 std::atomic 内部的锁

    我用谷歌搜索了一下 似乎找不到GCC选项或libstdc 库宏为此 是否可以强制在所有的内部使用锁定std atomic模板专业化 在某些平台上 某些专业化无论如何都会锁定 因此这似乎是一个可行的选择 过去我发现使用std atomic使用
  • 将 Java 日期向后更改一小时

    我有一个 Java 日期对象 Date currentDate new Date 这将给出当前日期和时间 例子 Thu Jan 12 10 17 47 GMT 2012 相反 我想获取日期 将其更改为一小时前 这样它应该给我 Thu Jan
  • GDB 函数参数上的条件中断

    我想在函数参数大于某个值时设置断点 下面的虚拟代码 int main void uint64 t num 123456 uint64 t x 847534 uint64 t other num x x num other stuff her
  • Python:如何在两个单独的数组之间找到两个相等/最接近的值?

    假设我们有两个长度相等的数组 arr1 21 2 3 5 13 arr2 10 4 5 9 12 20 哪个变量来自arr1 is 相等 最接近到一个变量arr2 看看这两个列表 我们可以很容易地说最接近的数字是4 5 and 5 我试图实
  • 如何使用适用于 iOS 的谷歌地图 sdk 来拟合坐标数组的边界?

    如何使用适用于 iOS 的谷歌地图 sdk 来拟合坐标数组的边界 我需要缩放地图以获得 4 个可见标记 这是我对这个问题的解决方案 建设一个GMSCoordinateBounds对象由多个坐标组成 void focusMapToShowAl
  • 零部署 CouchDB 嵌入 Windows 应用程序?

    我可能在这里做梦 但我想知道是否有可能将最小的 CouchDB 引擎完全嵌入到 Windows 应用程序中 以便该应用程序可以运行而无需在用户计算机上安装 CouchDB Erlang 我已经提供了这种精简 捆绑的功能 请在此处查看http
  • 如何在 SwiftUI 中对 Imagepicker 进行两次单独的调用?

    我希望用户能够将两个单独的图像上传到同一视图的两个不同部分 我能够让第一张图像在顶部正确显示 但每当用户添加第二个图像时 顶部的图像会再次更新 而不是底部的图像 截屏 https i stack imgur com IOi90 png 下面
  • 具有自定义设置的 Django runserver 命令

    我尝试使用自定义设置在命令中执行 runserver 但设置未加载 from django core management base import BaseCommand from django core management import
  • 二进制文件 I/O

    如何用D语言读写二进制文件 在 C 语言中是 FILE fp fopen home peu Desktop bla bin wb char x 4 RIFF fwrite x sizeof char 4 fp 我在 D 找到了 rawWri
  • 使用 Folium 在地图上创建标记会导致空白 HTML 页面

    我尝试使用 python3 中的 folium 库创建地图 在我向地图添加标记之前它工作正常 添加标记后 输出结果只是一个空白的 HTML 页面 import folium map folium Map location 20 59 78
  • 如何在R中将文本拆分为两个有意义的单词

    这是我的数据框 df 中的文本 其中有一个名为 problem note text 的文本列 SSCIssue 钞票分配器故障执行检查 分配器故障 要求商店取出钞票分配器并将其放回去 仍然错误消息说前门已打开 因此 CE attn req联
  • PHP mysqli_multi_query 大插入问题

    我尝试了很多方法试图插入从文本文件解析的大量数据 在我的服务器上大约 2 秒内将 200 000 行文本解析到数组中 所以我知道这部分不是问题 我使用的 mysqli multi query 以 5 000 块为单位发送查询 出于某种原因