在windows中测试musql数据库

又一个号称兼容SQLite,速度快几百倍的数据库引擎,不太相信。

存储库地址:https://github.com/samyfodil/musql

第一个版本是10月发布的。作者没说用了AI编程。

一开始下载了二进制包,但是里面只有服务端和转换文件,以及一个doom游戏,而没有客户端,放弃。

改用go语言

复制代码
C:\d>wget https://go.dev/dl/go1.27.3.windows-amd64.zip
--2026-10-24 18:31:25--  https://go.dev/dl/go1.27.3.windows-amd64.zip
Resolving go.dev (go.dev)... 2001:4860:4802:34::15, 2001:4860:4802:36::15, 2001:4860:4802:38::15, ...
Connecting to go.dev (go.dev)|2001:4860:4802:34::15|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://dl.google.com/go/go1.27.3.windows-amd64.zip [following]
--2026-10-24 18:31:26--  https://dl.google.com/go/go1.27.3.windows-amd64.zip
Resolving dl.google.com (dl.google.com)... 220.181.174.33
Connecting to dl.google.com (dl.google.com)|220.181.174.33|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 79010309 (75M) [application/zip]
Saving to: 'go1.27.3.windows-amd64.zip'

go1.27.3.windows-amd64.zip    100%[=================================================>]  75.35M  39.9MB/s    in 1.9s

2026-10-24 18:31:28 (39.9 MB/s) - 'go1.27.3.windows-amd64.zip' saved [79010309/79010309]

解压缩到目录gowin

复制代码
C:\d>cd gowin

C:\d\gowin>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 D0F9-C561

 C:\d\gowin 的目录

2026/10/24  18:32    <DIR>          .
2026/10/24  18:32    <DIR>          ..
2026/10/24  18:32    <DIR>          go
               0 个文件              0 字节
               3 个目录 179,812,171,776 可用字节

C:\d\gowin>cd go\bin

C:\d\gowin\go\bin>go version
go version go1.27.3 windows/amd64

C:\d\gowin\go\bin>cd \d

C:\d>set GOROOT=C:\d\gowin\go

C:\d>mkdir goprj

C:\d>set GOPATH=c:\d\goprj

C:\d>set path=%GOROOT%\bin;%GOPATH%\bin;%PATH%

C:\d>go version
go version go1.27.3 windows/amd64

然后用一个hello world程序测试。

go 复制代码
package main
import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

测试成功。

复制代码
C:\d>go run test.go
Hello, World!

test.go:7:5: no required module provides package github.com/samyfodil/musql/driver; to add it:
        go get github.com/samyfodil/musql/driver


C:\d>move test.go goprj
移动了         1 个文件。

C:\d>cd goprj

下载驱动失败,按照网上的办法添加国内代理,可以下载了,也比较慢。

复制代码
C:\d\goprj>go get github.com/samyfodil/musql/driver
go: module github.com/samyfodil/musql/driver: Get "https://proxy.golang.org/github.com/samyfodil/musql/driver/@v/list": dial tcp [2607:f8b0:400a:80c::2011]:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

C:\d\goprj>go get github.com/samyfodil/musql/driver
go: module github.com/samyfodil/musql/driver: Get "https://proxy.golang.org/github.com/samyfodil/musql/driver/@v/list": dial tcp 142.250.73.113:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

C:\d\goprj>go env -w GOPROXY=https://goproxy.cn,direct

C:\d\goprj>go get github.com/samyfodil/musql/driver
go: downloading github.com/samyfodil/musql v0.4.0
go: downloading golang.org/x/sys v0.46.0
go: upgraded go 1.25rc2 => 1.27.0
go: added github.com/samyfodil/musql v0.4.0
go: added golang.org/x/sys v0.46.0

只有如下的例子代码片段,对不会go语言的人,比如我就很困难。

In a Go program

go 复制代码
go get github.com/samyfodil/musql/driver
import (
    "database/sql"

    _ "github.com/samyfodil/musql/driver"
)

db, err := sql.Open("sqlite", "app.musq") // created if missing
// ...then use db exactly like any database/sql database.

Pure Go, no CGo; needs Go 1.27 or newer. The driver registers as sqlite (and musql), so code written for another SQLite driver usually only changes its import. Use one SQL statement per Exec or Query call.

参考duckdb的go程序例子和代码片段改写。

go 复制代码
package main

import (
    "database/sql"
    "errors"
    "fmt"
    "log"
    _ "github.com/samyfodil/musql/driver"
)

func main() {
    db, err := sql.Open("sqlite", "app.musq")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    _, err = db.Exec(`CREATE TABLE people (id INTEGER, name VARCHAR)`)
    if err != nil {
        log.Fatal(err)
    }
    _, err = db.Exec(`INSERT INTO people VALUES (42, 'John')`)
    if err != nil {
        log.Fatal(err)
    }

    var (
        id   int
        name string
    )
    row := db.QueryRow(`SELECT id, name FROM people`)
    err = row.Scan(&id, &name)
    if errors.Is(err, sql.ErrNoRows) {
        log.Println("no rows")
    } else if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("id: %d, name: %s\n", id, name)
}

测试通过

复制代码
C:\d\goprj>go run test2.go
id: 42, name: John

再把建表和插入部分删除,查询部分改为

复制代码
row := db.QueryRow(`SELECT s id, 'sum' name from(select sum(value) s FROM generate_series(1, 10000000) )`)

执行时间如下。

复制代码
C:\d\goprj>go run test3.go
执行查询前: 2026-10-24 19:39:23.9789199 +0800 CST m=+0.001547001
id: 50000005000000, name: sum
执行查询后: 2026-10-24 19:39:27.412829 +0800 CST m=+3.435456101
时间间隔: 3.4339091s

C:\d\goprj>go build test3.go

C:\d\goprj>test3
执行查询前: 2026-10-24 19:41:08.933372 +0800 CST m=+0.001756201
id: 50000005000000, name: sum
执行查询后: 2026-10-24 19:41:12.0184741 +0800 CST m=+3.086858301
时间间隔: 3.0851021s

go build默认就是release, 所以已经是优化后的结果。

相关推荐
在世修行1 小时前
智学文枢:AI 客户端封装
python·http·ai·1024程序员节·pyside
buddyMe智能助手1 小时前
记忆还没失效,但动作已经危险:该不该先核实,是动作说了算
1024程序员节
大江东去浪淘尽千古风流人物1 小时前
【HIMO】跨模态图像匹配算法:IMO方向场提取与PolarP描述符源码精讲
matlab·跨模态·遥感·图像匹配·1024程序员节·特征描述符
小南家的青蛙1 小时前
华为云DCS全产品对比
redis·1024程序员节
芝麻开门2921 小时前
c++11
c++11·1024程序员节
乃嘿仔1 小时前
AI 热点日报 · 2026-10-24
1024程序员节
HY小宝F1 小时前
智能摄像头系统 30 天学习计划 Day 08 · FFmpeg:成为你的“视频瑞士军刀”
1024程序员节
zyseo81 小时前
谷歌SEO 排名因素权重地图:把精力花在刀刃上
1024程序员节
basketball6161 小时前
动态规划第一章:引论
算法·动态规划·1024程序员节