全链路基准:Haskell 引擎 ←命名管道→ Rust 存储进程 存储进程:../../chusql-storage/target\release\server.exe 管道:chusql-fullchain-145262202226 数据目录:C:\Users\32402\AppData\Local\Temp\chusql-fullchain-145262202226 数据规模:users = 1000 行,orders = 1000 行 计时:墙上时钟(单调);每条语句都走完整链路 [启动] 存储进程就绪,用时 0.05 s [建表] CREATE TABLE users 2.3 ms 0 行 CREATE TABLE orders 1.6 ms 0 行 [写入:每条 INSERT 都是一次完整落盘] 1000 条 INSERT INTO users 2949.8 ms 2.950 ms/条 1000 条 INSERT INTO orders 3244.4 ms 3.244 ms/条 [分解:同一条 INSERT 拆成两半,都用原始 IPC,不经过引擎] CREATE TABLE raw_users 1.9 ms 0 行 list_catalog(取结构) 23.3 ms 0.116 ms/次 原始 IPC insert × 1000 2992.4 ms 2.992 ms/条 [读取与查询:整条语句,含引擎侧的解析与语义检查] SELECT * FROM users 1.9 ms 1000 行 SELECT name FROM users WHERE age > 90 2.5 ms 90 行 [读取与查询:连接] JOIN + WHERE(哈希连接) 5.4 ms 90 行 [点查] lookup_by_index(原始 IPC,按 id) 7.7 ms 0.077 ms/次(命中 100/100) SELECT ... WHERE id = k(走 Lookup) 0.4 ms 1 行 [批量插入:一条语句带多行,N 行只落一次盘] CREATE TABLE batch_t 3.0 ms 0 行 多行 INSERT 58.8 ms 0.059 ms/行(100 行/条 × 10 条语句) [行级删除:代价和删几行无关,只和扫描 + 一次落盘有关] DELETE FROM users WHERE id = k(1 行) 4.8 ms 0 行 DELETE FROM users(全部) 20.2 ms 0 行 [二级索引:没有索引回退扫描,建完索引走索引] CREATE TABLE items 2.1 ms 0 行 (先把 1000 行灌进 items:53.2 ms) SELECT ... WHERE code = k(无索引) 1.8 ms 1 行 CREATE INDEX ON items (code) 9.8 ms 0 行 SELECT ... WHERE code = k(走索引) 0.2 ms 1 行 [数据字典统计] batch_t 1000 行 索引=id 统计=age:100 id:1000 name:1000 items 1000 行 索引=id code 统计=code:1000 id:1000 orders 1000 行 索引=id 统计=id:1000 product:50 user_id:1000 raw_users 1000 行 索引=id 统计=age:100 id:1000 name:1000 users 0 行 索引=id 统计=age:0 id:0 name:0 [校验] age > 90 命中 90(按数据分布应为 90 行) JOIN 命中 90(每个用户恰好 1 张订单,应与上一行相同 = 90) 多行 INSERT 灌进去 1000 行(应为 1000) 二级索引那一行:code = 3501 应该查到 id = 500 [收尾] 停存储进程、清理数据目录