文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> 软件教程>php和go写入MySQL速度解答

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

5e92849859c96.png

测试环境,在同一服务器上。

为了尽可能准确,都没有用框架,用的简单代码

1. 插入1w条记录

结果比较

5e9284a027eea.png

结果:php和go基本都是11s左右,速度 基本相当。

2. 插入10w条记录

5e9284ab0408c.png

结果可以看出来,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语言,现在被很多的网站编程人员广泛的运用。

相关阅读更多 +
最近更新
排行榜 更多 +
元梦之星最新版手游

元梦之星最新版手游

棋牌卡牌 下载
我自为道安卓版

我自为道安卓版

角色扮演 下载
一剑斩仙

一剑斩仙

角色扮演 下载