Skip to main content

Compare / TiDB parser

TiDB parser alternative: GoSQLX compared

The TiDB parser (github.com/pingcap/tidb/pkg/parser) is the MySQL-compatible parser of the TiDB database, written in Go.

Approach
yacc-generated MySQL-compatible grammar from the TiDB project
Dialect
MySQL (TiDB flavour)
CGo required
No

Pick TiDB parser when

  • You target MySQL or TiDB and want TiDB-specific syntax and its AST visitors.
  • You are building tooling around TiDB and want to match how the database itself parses SQL.

Pick GoSQLX when

  • You need dialects beyond MySQL.
  • You want a self-contained module with formatting, linting and security scanning included.
  • You want to avoid importing a subpackage of a database server module.

Parse speed, measured

End-to-end stage (SQL text to AST) · Apple M4 (darwin/arm64) · go1.27.2 · median of 10 runs · measured 2026-10-15 · TiDB parser v0.0.0-20261015143638-7193401b6746. Lower is faster.

QueryGoSQLXTiDB parser
Simple SELECT925 ns1,464 ns
SELECT with WHERE, ORDER BY, LIMIT2,028 ns3,894 ns
Two-table JOIN3,215 ns4,850 ns
GROUP BY with HAVING2,230 ns3,417 ns
IN subquery1,887 ns3,362 ns
Common table expression2,748 ns4,918 ns
Window function1,899 ns3,221 ns
Multi-JOIN analytical query8,776 ns12,445 ns
INSERT VALUES1,443 ns2,105 ns
UPDATE with WHERE1,200 ns2,127 ns
DELETE with WHERE841 ns1,223 ns

Read with care. The libraries implement different SQL dialects and build different ASTs (pg_query_go wraps the real PostgreSQL parser through CGo and converts its tree to Go structs; Vitess, TiDB and xwb1989 implement MySQL grammars). Each figure is the end-to-end cost of turning the same SQL text into that library's AST on the stated hardware, not identical work. Results vary by query, so check the rows that resemble your workload.

Full table, methodology and reproduce steps: competitor benchmarks. Source: benchmarks/compare/results/latest.json, commit c95aa7c.

What GoSQLX offers

Pure Go with no CGo, 8 dialects, 30 built-in lint rules, a formatter, a SQL injection scanner, an LSP server and an MCP server. Requires Go 1.26+.

Full feature matrix