Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cache the index of named parameters #23

Merged
merged 1 commit into from
Feb 6, 2025
Merged

Conversation

charlievieth
Copy link
Owner

The commit changes bind to cache the position of named parameters, which improves the performance of prepared queries that are re-used.

goos: darwin
goarch: arm64
pkg: github.com/charlievieth/go-sqlite3
cpu: Apple M4 Pro
                                          │   o10.txt   │               n10.txt               │
                                          │   sec/op    │   sec/op     vs base                │
Scan10Cols-14                               4.279µ ± 0%   4.264µ ± 3%        ~ (p=0.579 n=10)
Suite/BenchmarkExec/Params-14               715.2n ± 1%   716.3n ± 1%        ~ (p=0.927 n=10)
Suite/BenchmarkExec/NoParams-14             533.1n ± 2%   517.9n ± 3%   -2.86% (p=0.001 n=10)
Suite/BenchmarkExecContext/Params-14        1.560µ ± 4%   1.504µ ± 0%   -3.56% (p=0.000 n=10)
Suite/BenchmarkExecContext/NoParams-14      1.523µ ± 2%   1.518µ ± 1%        ~ (p=1.000 n=10)
Suite/BenchmarkExecStep-14                  452.5µ ± 2%   444.6µ ± 1%   -1.76% (p=0.015 n=10)
Suite/BenchmarkExecContextStep-14           444.1µ ± 2%   451.7µ ± 1%   +1.72% (p=0.043 n=10)
Suite/BenchmarkExecTx-14                    1.607µ ± 1%   1.585µ ± 1%   -1.40% (p=0.000 n=10)
Suite/BenchmarkQuery-14                     1.757µ ± 1%   1.784µ ± 0%   +1.51% (p=0.001 n=10)
Suite/BenchmarkQuerySimple-14               1.008µ ± 2%   1.015µ ± 1%        ~ (p=0.117 n=10)
Suite/BenchmarkQueryContext/Background-14   2.380µ ± 1%   2.315µ ± 0%   -2.73% (p=0.001 n=10)
Suite/BenchmarkQueryContext/WithCancel-14   8.314µ ± 1%   8.236µ ± 4%        ~ (p=0.225 n=10)
Suite/BenchmarkParams-14                    1.952µ ± 1%   2.012µ ± 1%   +3.07% (p=0.000 n=10)
Suite/BenchmarkStmt-14                      1.373µ ± 1%   1.394µ ± 1%   +1.57% (p=0.001 n=10)
Suite/BenchmarkRows-14                      58.61µ ± 3%   59.95µ ± 1%   +2.29% (p=0.029 n=10)
Suite/BenchmarkStmtRows-14                  58.80µ ± 2%   59.82µ ± 2%   +1.73% (p=0.050 n=10)
Suite/BenchmarkStmt10Cols-14                4.409µ ± 1%   4.466µ ± 0%   +1.30% (p=0.006 n=10)
Suite/BenchmarkScanRawBytes-14              2.499µ ± 1%   2.470µ ± 1%   -1.18% (p=0.001 n=10)
Suite/BenchmarkQueryParallel-14             438.3n ± 5%   439.0n ± 4%        ~ (p=0.812 n=10)
Suite/BenchmarkOpen-14                      13.13µ ± 1%   13.05µ ± 2%        ~ (p=0.197 n=10)
Suite/BenchmarkNamedParams-14               1.675µ ± 1%   1.196µ ± 2%  -28.60% (p=0.000 n=10)
Suite/BenchmarkParseTime-14                 1.040µ ± 2%   1.019µ ± 2%   -2.02% (p=0.000 n=10)
geomean                                     4.173µ        4.102µ        -1.69%

                                          │   o10.txt    │                n10.txt                │
                                          │     B/op     │     B/op      vs base                 │
Scan10Cols-14                                 712.0 ± 0%     712.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExec/Params-14                 200.0 ± 0%     216.0 ± 0%  +8.00% (p=0.000 n=10)
Suite/BenchmarkExec/NoParams-14               64.00 ± 0%     64.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContext/Params-14          360.0 ± 0%     376.0 ± 0%  +4.44% (p=0.000 n=10)
Suite/BenchmarkExecContext/NoParams-14        208.0 ± 0%     208.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecStep-14                    64.00 ± 0%     64.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContextStep-14             208.0 ± 0%     208.0 ± 0%       ~ (p=1.000 n=10)
Suite/BenchmarkExecTx-14                      520.0 ± 0%     520.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQuery-14                       640.0 ± 0%     656.0 ± 0%  +2.50% (p=0.000 n=10)
Suite/BenchmarkQuerySimple-14                 440.0 ± 0%     456.0 ± 0%  +3.64% (p=0.000 n=10)
Suite/BenchmarkQueryContext/Background-14     396.0 ± 0%     396.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryContext/WithCancel-14   1.016Ki ± 0%   1.015Ki ± 0%       ~ (p=0.121 n=10)
Suite/BenchmarkParams-14                      784.0 ± 0%     800.0 ± 0%  +2.04% (p=0.000 n=10)
Suite/BenchmarkStmt-14                        784.0 ± 0%     784.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkRows-14                      6.047Ki ± 0%   6.062Ki ± 0%  +0.26% (p=0.000 n=10)
Suite/BenchmarkStmtRows-14                  6.055Ki ± 0%   6.055Ki ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmt10Cols-14                  712.0 ± 0%     712.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkScanRawBytes-14                592.0 ± 0%     592.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryParallel-14               532.0 ± 0%     548.0 ± 0%  +3.01% (p=0.000 n=10)
Suite/BenchmarkOpen-14                        111.0 ± 1%     111.0 ± 1%       ~ (p=1.000 n=10)
Suite/BenchmarkNamedParams-14                 664.0 ± 0%     600.0 ± 0%  -9.64% (p=0.000 n=10)
Suite/BenchmarkParseTime-14                   444.0 ± 0%     444.0 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                       479.5          482.4       +0.60%
¹ all samples are equal

                                          │  o10.txt   │               n10.txt               │
                                          │ allocs/op  │ allocs/op   vs base                 │
Scan10Cols-14                               19.00 ± 0%   19.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExec/Params-14               8.000 ± 0%   8.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExec/NoParams-14             4.000 ± 0%   4.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContext/Params-14        10.00 ± 0%   10.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContext/NoParams-14      6.000 ± 0%   6.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecStep-14                  4.000 ± 0%   4.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContextStep-14           6.000 ± 0%   6.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecTx-14                    18.00 ± 0%   18.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQuery-14                     22.00 ± 0%   22.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQuerySimple-14               13.00 ± 0%   13.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryContext/Background-14   10.00 ± 0%   10.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryContext/WithCancel-14   26.00 ± 0%   26.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkParams-14                    23.00 ± 0%   23.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmt-14                      23.00 ± 0%   23.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkRows-14                      418.0 ± 0%   418.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmtRows-14                  418.0 ± 0%   418.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmt10Cols-14                19.00 ± 0%   19.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkScanRawBytes-14              18.00 ± 0%   18.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryParallel-14             15.00 ± 0%   15.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkOpen-14                      3.000 ± 0%   3.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkNamedParams-14               14.00 ± 0%   13.00 ± 0%  -7.14% (p=0.000 n=10)
Suite/BenchmarkParseTime-14                 12.00 ± 0%   12.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                     15.93        15.87       -0.34%
¹ all samples are equal

The commit changes bind to cache the position of named parameters, which
improves the performance of prepared queries that are re-used.

```
goos: darwin
goarch: arm64
pkg: github.com/charlievieth/go-sqlite3
cpu: Apple M4 Pro
                                          │   o10.txt   │               n10.txt               │
                                          │   sec/op    │   sec/op     vs base                │
Scan10Cols-14                               4.279µ ± 0%   4.264µ ± 3%        ~ (p=0.579 n=10)
Suite/BenchmarkExec/Params-14               715.2n ± 1%   716.3n ± 1%        ~ (p=0.927 n=10)
Suite/BenchmarkExec/NoParams-14             533.1n ± 2%   517.9n ± 3%   -2.86% (p=0.001 n=10)
Suite/BenchmarkExecContext/Params-14        1.560µ ± 4%   1.504µ ± 0%   -3.56% (p=0.000 n=10)
Suite/BenchmarkExecContext/NoParams-14      1.523µ ± 2%   1.518µ ± 1%        ~ (p=1.000 n=10)
Suite/BenchmarkExecStep-14                  452.5µ ± 2%   444.6µ ± 1%   -1.76% (p=0.015 n=10)
Suite/BenchmarkExecContextStep-14           444.1µ ± 2%   451.7µ ± 1%   +1.72% (p=0.043 n=10)
Suite/BenchmarkExecTx-14                    1.607µ ± 1%   1.585µ ± 1%   -1.40% (p=0.000 n=10)
Suite/BenchmarkQuery-14                     1.757µ ± 1%   1.784µ ± 0%   +1.51% (p=0.001 n=10)
Suite/BenchmarkQuerySimple-14               1.008µ ± 2%   1.015µ ± 1%        ~ (p=0.117 n=10)
Suite/BenchmarkQueryContext/Background-14   2.380µ ± 1%   2.315µ ± 0%   -2.73% (p=0.001 n=10)
Suite/BenchmarkQueryContext/WithCancel-14   8.314µ ± 1%   8.236µ ± 4%        ~ (p=0.225 n=10)
Suite/BenchmarkParams-14                    1.952µ ± 1%   2.012µ ± 1%   +3.07% (p=0.000 n=10)
Suite/BenchmarkStmt-14                      1.373µ ± 1%   1.394µ ± 1%   +1.57% (p=0.001 n=10)
Suite/BenchmarkRows-14                      58.61µ ± 3%   59.95µ ± 1%   +2.29% (p=0.029 n=10)
Suite/BenchmarkStmtRows-14                  58.80µ ± 2%   59.82µ ± 2%   +1.73% (p=0.050 n=10)
Suite/BenchmarkStmt10Cols-14                4.409µ ± 1%   4.466µ ± 0%   +1.30% (p=0.006 n=10)
Suite/BenchmarkScanRawBytes-14              2.499µ ± 1%   2.470µ ± 1%   -1.18% (p=0.001 n=10)
Suite/BenchmarkQueryParallel-14             438.3n ± 5%   439.0n ± 4%        ~ (p=0.812 n=10)
Suite/BenchmarkOpen-14                      13.13µ ± 1%   13.05µ ± 2%        ~ (p=0.197 n=10)
Suite/BenchmarkNamedParams-14               1.675µ ± 1%   1.196µ ± 2%  -28.60% (p=0.000 n=10)
Suite/BenchmarkParseTime-14                 1.040µ ± 2%   1.019µ ± 2%   -2.02% (p=0.000 n=10)
geomean                                     4.173µ        4.102µ        -1.69%

                                          │   o10.txt    │                n10.txt                │
                                          │     B/op     │     B/op      vs base                 │
Scan10Cols-14                                 712.0 ± 0%     712.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExec/Params-14                 200.0 ± 0%     216.0 ± 0%  +8.00% (p=0.000 n=10)
Suite/BenchmarkExec/NoParams-14               64.00 ± 0%     64.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContext/Params-14          360.0 ± 0%     376.0 ± 0%  +4.44% (p=0.000 n=10)
Suite/BenchmarkExecContext/NoParams-14        208.0 ± 0%     208.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecStep-14                    64.00 ± 0%     64.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContextStep-14             208.0 ± 0%     208.0 ± 0%       ~ (p=1.000 n=10)
Suite/BenchmarkExecTx-14                      520.0 ± 0%     520.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQuery-14                       640.0 ± 0%     656.0 ± 0%  +2.50% (p=0.000 n=10)
Suite/BenchmarkQuerySimple-14                 440.0 ± 0%     456.0 ± 0%  +3.64% (p=0.000 n=10)
Suite/BenchmarkQueryContext/Background-14     396.0 ± 0%     396.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryContext/WithCancel-14   1.016Ki ± 0%   1.015Ki ± 0%       ~ (p=0.121 n=10)
Suite/BenchmarkParams-14                      784.0 ± 0%     800.0 ± 0%  +2.04% (p=0.000 n=10)
Suite/BenchmarkStmt-14                        784.0 ± 0%     784.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkRows-14                      6.047Ki ± 0%   6.062Ki ± 0%  +0.26% (p=0.000 n=10)
Suite/BenchmarkStmtRows-14                  6.055Ki ± 0%   6.055Ki ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmt10Cols-14                  712.0 ± 0%     712.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkScanRawBytes-14                592.0 ± 0%     592.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryParallel-14               532.0 ± 0%     548.0 ± 0%  +3.01% (p=0.000 n=10)
Suite/BenchmarkOpen-14                        111.0 ± 1%     111.0 ± 1%       ~ (p=1.000 n=10)
Suite/BenchmarkNamedParams-14                 664.0 ± 0%     600.0 ± 0%  -9.64% (p=0.000 n=10)
Suite/BenchmarkParseTime-14                   444.0 ± 0%     444.0 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                       479.5          482.4       +0.60%
¹ all samples are equal

                                          │  o10.txt   │               n10.txt               │
                                          │ allocs/op  │ allocs/op   vs base                 │
Scan10Cols-14                               19.00 ± 0%   19.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExec/Params-14               8.000 ± 0%   8.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExec/NoParams-14             4.000 ± 0%   4.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContext/Params-14        10.00 ± 0%   10.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContext/NoParams-14      6.000 ± 0%   6.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecStep-14                  4.000 ± 0%   4.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecContextStep-14           6.000 ± 0%   6.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkExecTx-14                    18.00 ± 0%   18.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQuery-14                     22.00 ± 0%   22.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQuerySimple-14               13.00 ± 0%   13.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryContext/Background-14   10.00 ± 0%   10.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryContext/WithCancel-14   26.00 ± 0%   26.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkParams-14                    23.00 ± 0%   23.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmt-14                      23.00 ± 0%   23.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkRows-14                      418.0 ± 0%   418.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmtRows-14                  418.0 ± 0%   418.0 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkStmt10Cols-14                19.00 ± 0%   19.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkScanRawBytes-14              18.00 ± 0%   18.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkQueryParallel-14             15.00 ± 0%   15.00 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkOpen-14                      3.000 ± 0%   3.000 ± 0%       ~ (p=1.000 n=10) ¹
Suite/BenchmarkNamedParams-14               14.00 ± 0%   13.00 ± 0%  -7.14% (p=0.000 n=10)
Suite/BenchmarkParseTime-14                 12.00 ± 0%   12.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                     15.93        15.87       -0.34%
¹ all samples are equal
```
@charlievieth charlievieth merged commit a842b42 into master Feb 6, 2025
4 checks passed
@charlievieth charlievieth deleted the cev/named-params branch February 6, 2025 04:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant