php不同方法向mysql写入多条数据时的效率比对

php不同方法向mysql写入多条数据时的效率比对


DATA: 2018年07月13日 21:06:18

最近有读者 @pjlCSDN 在我的文章 php预处理方式向mysql中插入多条数据 留言提问: 这样做(php预处理)会对效率有影响吗?比如我插入一万条数据的时候。

回答这个问题,我不能想当然,所以在这里用几种实现做个实验。效率测试方法参考文章 php 测试 程序执行时间,内存使用情况

mysql数据库新建database,新建table

create database yixzm;

CREATE TABLE IF NOT EXISTS `guests`(
   `name` TEXT,   
   `email` TEXT
)ENGINE=yixzm DEFAULT CHARSET=utf8;

先来最笨的实现方式,每条数据执行一次SQL语句:

$servername = "localhost";
$username = "root";
$password = NULL;
$dbname = "yixzm";

$stime=microtime(true);

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
        die("Connect Failed: " . $conn->connect_error);
}

for ($i=0; $i<10000; $i++) {
    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('Sanji', 'sanji@onepiece.com', 'john@example.com');";
    $conn->multi_query($sql);
}

$conn->close();

$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo "<br />[页面执行时间:{$total} ]秒";

测试结果:[页面执行时间:1.182238817215 ]秒

使用常规方法,将SQL语句合并,在循环外一次执行。这里仅贴出SQL 相关代码

$sql = NULL;
for ($i=0; $i<10000; $i++) {
    $sql.= "INSERT INTO guests (name, email)
    VALUES ('nami', 'nami@onepiece.com');";
}
if ($conn->multi_query($sql) === TRUE) {
    echo "新记录插入成功";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

测试结果:[页面执行时间:0.0086851119995117 ]秒

最后,是@pjlCSDN 想知道的预处理方法:

//预处理,个人理解:封装数据库操作,简化多条数据场景下的提交过程
$stmt = $conn->prepare("insert into guests (name, email) values(?, ?)");
//i(int), s(string), d(double)
$stmt->bind_param("ss", $name, $email);

for ($i=0; $i<10000; $i++) {
    // add data to table
    $name = "Sanji";
    $email = "sanji@onepiece.com";
    $stmt->execute();
}

测试结果:[页面执行时间:0.39759397506714 ]秒

从实际数据可以看到,预处理是会损失效率,而且还挺多。

这里提一下我的观点:编程语言的发展很多时候都是在降低执行效率,换取开发效率。所以,即使预处理会损失代码的执行效率也不用担心,大胆的用就好。毕竟,可以让你做事情更快。

版权声明

FindFor


首发 FindFor,转载请附链接!

赞赏支持

感谢支持!


建站不易,感谢支持!

推荐阅读
智慧城管系统详细设计方案
# 智慧城管系统详细设计方案 ## 一、系统架构设计 ### (一)整体架构 本系统采用前后端分离的微服务架构,前端基于Vue.js构建用户界面,后端使用ThinkPHP8开发API服务。通过微服务架构,将系统拆分为多个独立的服务模块,各模块可独立开发、部署和扩展,提高了系统的可维护性和扩展性。 ### (二)技术栈选择 1. **前端技术栈** - **Vue.js**:作为前端框架,
140

libnfc安装配置(Linux)
## 1、安装依赖库 ```shell sudo apt-get install libusb-dev libpcsclite-dev libusb libpcsclite1 libccid pcscd ``` ## 2、下载libnfc 选择一个libnfc存放路径,执行git命令下载libnfc ```shell git clone https://github.com/nfc-tools/l
312

dirsearch简单使用
` dirsearch`是一个用于在Web服务器上枚举目录和文件的工具,支持多线程,具有一些启发式算法,能够识别隐藏目录。以下是使用`dirsearch`的一些基本步骤: 1. **安装dirsearch**: 首先,确保你的系统上已经安装了Python。然后,可以通过以下方式安装`dirsearch`: `git clone https://gi
64

dirb使用
`dirb`(Directory Buster)是一个用于在Web服务器上枚举目录和文件的工具。它通过发送HTTP请求并分析响应来探测目标主机上存在的目录和文件。`dirb`的主要目的是帮助安全测试人员和黑客发现目标网站上隐藏的目录,这些目录可能包含敏感信息或安全漏洞。 以下是一些`dirb`工具的基本用法和参数: 1. **基本用法**: `dirb http://targ
90

ubuntu20.04.4安装golang语言
## 1、官网下载安装包 Go下载 - Go语言中文网 - Golang中文社区 https://studygolang.com/dl ## 2、将下载下来的安装包解压到env路径下 ``` tar xf go1.18.linux-amd64.tar.gz ``` ## 3、添加环境变量 通过将Go目录的位置添加到$PATH环境变量中,系统将知道在何处可以找到Go可执行二进制文件。 ``` vim
135

升级 Linux 服务器上的 TLS 版本至 1.2 或更高版本
## 1、检查当前 TLS 版本: 首先,您需要确认当前服务器上所使用的 TLS 版本。您可以通过运行以下命令来检查 OpenSSL 版本和支持的 TLS 版本: ```shell openssl version openssl ciphers -v ``` 如果您的 OpenSSL 版本较旧,可能需要升级 OpenSSL 以支持更高的 TLS 版本。升级 OpenSSL 的具体步骤取决于您所使用
91

茶馆注册商标需要注册哪几个类别?
茶馆注册商标需要综合考虑多个方面,以下是详细介绍: ### 商标查询与评估 在进行茶馆商标注册之前,首先需要进行商标查询与评估,以确定所申请商标是否已经被他人注册或使用,避免侵权纠纷。可以通过中国国家知识产权局商标局的官方网站进行查询。 ### 明确商标注册类别 - **核心类别** - **第30类**:主要包括咖啡、茶、可可和咖啡代用品;米;食用淀粉和西米;面粉和谷类制品;面包、糕
183

咖啡馆注册商标应该注册哪几类?咖啡馆还有配套的公众号和小程序,商标是否需要追加类型?
## 咖啡馆注册商标应该注册哪几类? 咖啡馆注册商标时,需要综合考虑核心业务、相关产品及未来发展可能涉及的领域,以下为你详细介绍需要重点关注的商标类别: ### 核心经营服务类 - **第43类**:提供食物和饮料服务;临时住宿。 - **重要子类别**: - 4301 组包含咖啡馆、餐厅、自助餐厅、快餐馆等服务。咖啡馆日常经营提供饮品、餐食等服务,此类别是必须注册的核心
504

[保姆级] Vue3 开发文档
#### 获取 this `Vue2` 中每个组件里使用 this 都指向当前组件实例,this 上还包含了全局挂载的东西、路由、状态管理等啥啥都有 而 Vue3 中没有 this,如果想要类似的用法,有两种,一是获取当前组件实例,二是获取全局实例,如下自己可以去打印出来看看 ```vue import { getCurrentInstance } from 'vue' // proxy
283

【转载】树莓派时间同步方法,来自博客园
树莓派系统时间不对在《初识树莓派》一文最后一张截图中其实隐藏了一个我没有太在意的时间问题,今天在开发树莓派监控程序的时候才发现。从图中我们可以知道上次登录时间是1970年1月1日星期四的00:03:17分,由此我们可以推断,新安装系统的树莓派默认系统时间应该是1970年1月1日开始的。很明显,这个时间与我们期望的当前时间是不符的。我们需要将系统时间修改为和当前时间同步。第一步:启用网络时间协议为了
396

Web前端开发众包资源共享,探索者联盟兼职开发者招募
# 项目情况 联盟接到合作伙伴的开发需求,有一系列的APP要开发。有很多个APP哦。 ## 需求描述 1. 参考指定APP,基于H5+Vue开发页面。 2. APP并不复杂,无需使用脚手架,cdn引入开发即可。 ## 交付要求 1. 源码交付 2. 代码风格良好,可顺利二次开发 3. 只要满足代码质量要求,能正常走通业务逻辑即可,无严格的APP测试步骤。 ## 预算 具体预算看APP复杂度。目前普
648

探索互联网新机遇,加入精英社群,共创辉煌职业篇章!
【探索互联网新机遇,加入精英社群,共创未来!】 在这个日新月异的互联网时代,每一处都蕴藏着无限可能与创新机遇。我们诚邀您成为“探索者联盟”的一员,与我们一起深度剖析市场动态,精准把握行业趋势,共同开启一段激动人心的职业旅程! 加入我们,您将享受到: - **市场分析**:深度解读互联网行业最新动态,洞悉市场先机。 - **职业规划**:一对一专业指导,定制个性化职业发展路径,助力您步步高升。
369