在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, 所以已经是优化后的结果。

相关推荐
星恒随风3 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无奈笑天下4 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
xiaoye-duck5 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
AllData公司负责人6 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
2601_967987376 小时前
Sqlite参考手册
数据库·python·sqlite·api·教程
隔窗听雨眠7 小时前
Oracle日志体系分层结构与故障定位路径
数据库·oracle·故障排查
为思念酝酿的痛7 小时前
C语言操作MySQL
数据库·mysql
ShineWinsu7 小时前
对于Qt:QTabWidget常见属性的解析
开发语言·数据库·c++·qt·浏览器·qtabwidget·标签页
普通人68 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
我不会起名字3228 小时前
req.Seqs[len-1]:空切片防御缺口与 RPC 二次校验
后端·mongodb·go·即时通讯·im·故障排查