php和go写入MySQL速度解答
时间:2020-12-30
来源:互联网
标签:
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统(RDBMS)之一。
1. 建表
表结构,简单,只有两个字段,name和age
CREATE TABLE `user1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL DEFAULT '',
`age` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
测试环境,在同一服务器上。
为了尽可能准确,都没有用框架,用的简单代码
1. 插入1w条记录
结果比较
结果:php和go基本都是11s左右,速度 基本相当。
2. 插入10w条记录
结果可以看出来,php不到2分钟,而go需要2分钟以上,php更快一点。
下面附上测试代码,有兴趣的可以测一下:
php:
function getMillisecond() {
list($s1, $s2) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
}
$dsn = 'mysql:dbname=demo;host=127.0.0.1';
$user = "root";
$password = '123456';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$count = 100000;
$start = getMillisecond();
for($i=0;$i<$count;$i++){
$age = rand(20,40);
$name = "user_".rand(100,999);
$sql = "insert into user (id,name,age) values('',?,?)";
$stat = $dbh->prepare($sql);
$stat->execute([$name, $age]);
}
$time = getMillisecond()-$start;
echo "time is ".$time."ms";
go:
package main
import (
"fmt"
"math/rand"
"strconv"
"time"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
const NUM = 100000
var (
userName string = "root"
password string = "123456"
ipAddrees string = "127.0.0.1"
port int = 3306
dbName string = "demo"
charset string = "utf8"
)
func connectMysql() *sqlx.DB {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddrees, port, dbName, charset)
Db, err := sqlx.Open("mysql", dsn)
if err != nil {
fmt.Printf("mysql connect failed, detail is [%v]", err.Error())
}
return Db
}
func addRecord(Db *sqlx.DB) {
for i := 0; i < NUM; i++ {
name := "user_" + strconv.Itoa(rand.Intn(999))
age := rand.Intn(40)
_, err := Db.Exec("insert into user1 (id,name,age) values(?,?,?)", 0, name, age)
if err != nil {
fmt.Printf("data insert faied, error:[%v]", err.Error())
return
}
}
}
func main() {
var Db *sqlx.DB = connectMysql()
defer Db.Close()
t1 := time.Now()
rand.Seed(time.Now().UnixNano())
addRecord(Db)
t2 := time.Now()
fmt.Println(t2.Sub(t1))
}
以上纯属个人见解,欢迎各位同行指正!
PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:HypertextPreprocessor)的缩写。PHP是一种HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。
-
2023年中央空调十大品牌选购指南 家用商用高性价比推荐排行 时间:2025-09-28
-
免费装扮QQ空间详细教程 手把手教你打造个性化空间不花钱 时间:2025-09-28
-
中国数字资产交易平台官网 - 安全可靠的数字货币交易与投资首选平台 时间:2025-09-28
-
支付宝账户注销步骤详解 手把手教你彻底关闭账号不留隐患 时间:2025-09-28
-
QQ空间皮肤装扮全攻略 教你轻松打造个性化主页 时间:2025-09-28
-
Win7系统重装步骤详解 新手也能轻松掌握的电脑系统重装教程 时间:2025-09-28
今日更新
-
撕了什么是什么梗:揭秘网络热词背后的爆笑真相,一看就懂!
阅读:18
-
想知道撕裂的天堂是什么梗吗?揭秘这个网络热词背后的真相,快来了解吧!
阅读:18
-
撕漏梗是什么梗?揭秘网络热词撕漏梗的爆笑来源和用法,看完秒懂!
阅读:18
-
三角洲行动最新调整-盾狗削弱监狱再无法和平撤离
阅读:18
-
暗区突围中秋惊喜福利发送-明日还将开启藏品礼盒活动
阅读:18
-
死不瞑目的梗是什么梗?揭秘网络热词背后的爆笑名场面
阅读:18
-
QQ飞车手游驾驶天赋怎么加点-驾驶天赋属性大全解析
阅读:18
-
永劫无间手游×尼尔联动时间确定-10月9日将启动
阅读:18
-
重返未来:1999迷思海-无启示虚图零塑1000m
阅读:18
-
时空绘旅人心动秘礼-罪印残响全新周边预售即将开启
阅读:18