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 ]秒

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

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

版权声明

翼安博客


首发 翼安博客,转载请附链接!

赞赏支持

感谢支持!


建站不易,感谢支持!

推荐阅读
计算机基础算法篇(二)—— 对称加密算法
##对称加密算法   在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。 ##常
50

网络安全基础篇(一)—— 常见名词解释1
##信息安全领域,渗透测试,漏扫,加固,逆向分别指什么 **渗透测试(Penetration Testing)**:渗透测试是一种针对计算机系统、网络或应用程序的安全评估方法。通过模拟攻击者的行为,渗透测试专家试图利用系统的漏洞或弱点来获取未经授权的访问权限,以评估系统的安全性,并提供改进建议。 **漏洞扫描(Vulnerability Scanning)**:漏洞扫描是通过自动化工具检测计算机
34

商务那些事(一)
##公共采购方式   公共采购一般包含以下几种方式: **公开招标**:这是最常用的一种采购方式,通过发布公告,邀请所有潜在的供应商参加竞争。招标人从应答人中择优选择中标(成交)供应商。这种方式的优势在于具有公开性和竞争性,可以降低采购成本,提高采购效率。 **邀请招标**:也称为有限竞争,这种方式不是对所有供应商开放,而是邀请少数特定的供应商参加竞争。这种方式的优点是节约
38

知识点学习Day5
1、公共采购方式(1) 公开招标:公开招标是最常见的招标方式,采购方在公共平台发布招标信息,符合条件的供应商都可以参与投标。公开招标的优点是投标人较多、竞争充分、不容易出现串标、围标等情况。 (2) 邀请招标:邀请招标是指采购人依法从符合相应资格条件的供应商中随机邀请3家以上供应商,并以投标邀请书的方式邀请其参加投标。这种方式是非公开性质的,通常适用于国家重点项目或国有资金占控
44

知识点学习Day4
C语言实现冒泡排序 1、升序排序: void asc(int *a,intn){    int i=0,j=0;    for( i=0;i<n-1;i++){        for(j=0;j<n-1;j++){     
42

计算机基础算法篇(一)—— 冒泡排序
##原理    对数组进行遍历,每次对相邻两个进行比较大小,若大的数值在前面则交换位置(升序),完成一趟遍历后数组中最大的数值到了数组的末尾位置,再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成,时间复杂度是O(n^2),空间复杂度O(1)。 ##代码实现 ###C语言 ```C #include void bubble_sort(int arr[],
58

知识点学习Day3
1. 使用 C语言开发的软件,一般情况下要如何测试?C语言开发完成的软件,主要执行一下步骤完成测试:(1)需求分析:首先明确软件的需求和功能,确保测试团队对软件的功能和目标有清晰的理解。(2)制定测试计划:根据需求分析,制定详细的测试计划,包括测试的目标、范围、资源、时间表等。(3)创建测试环境:准备测试所需的硬件、软件和网络环境,确保测试环境与实际运行环境相似。(4)编写测试用例:根据
50

计算机基础软件测试篇(一)—— C语言开发软件
##什么是系统测试,C 语言的系统测试有哪些方法?    系统测试是软件开发过程中的一种测试方法,旨在验证整个软件系统的功能、性能和稳定性,以确保软件在实际环境中正常工作。    在C语言中,系统测试的方法可以有以下几种: 单元测试(Unit Testing):对程序中的每个函数或模块进行测试,确保其独立的功能正确实现。可以使用测试框架如Google T
42

计算机基础运维篇(一)—— Apache与Nginx
##Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源; 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比;apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服
46

知识点学习Day2
1、简述面向对象编程和面向过程编程,区别面向对象(OOP):以对象为核心的编程方式,程序的主体是对象,对象具有属性和方法的实体,通过对象之间进行操作完成交互,通过定义类,可以创建多个对象实例,它的基本特征有三:封装性、继承性和多态性。封装是指将对象的属性和方法封装在类中,外部不能直接访问,内部访问时,调用其方法类方法就可以,继承是可以从已有的类派生出新的类,并且可以获取父类的属性和方法,多态是指统
52

计算机基础前端篇(一)—— 常见的前端框架
## vue ### 特点   Vue 是一个以数据驱动视图的轻量级渐进式 MVVM 框架。目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,所以其核心是一个响应的数据绑定系统。   **注**:*数据驱动视图: 常规的 js 都是操作 dom 来开发程序,代表者 jquery ,而Vue 不用直接操作 dom,是用数据来控制元素的变化。
55

作业1(0103)
一、列举你熟悉的三个前端框架,简述优缺点和特点。 答: Vue : Vue 是尤雨溪编写的一个构建数据驱动的 Web 界面的库,准确来说不是一个框架,它聚焦在 V ( view )视图层。
47