SQL Parsing

 Sun 13 September 2020   In 数据库   :)

应用

  • 高危操作确认与规避。比如,DBA不小心Drop数据表,而此类操作,目前还无有效的工具进行回滚,尤其是大表,其后果将是灾难性的。

  • SQL合法性判断

  • 去除无用条件:与或非 true & xxx (delete -> xxx) false & xxx (false) true | xxx (true) false | xxx (delete -> xxx)

  • 生成SQL特征

parsing

String -> split -> produce Tree

  • 词法分析(Lexical scanner) 分解: keyword, notkeyword (token)
  • 语法规则(Grammar rule module) 组合成一个序列

optimizer

  • 确定最优的执行序列(不一定),比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等 多条件时的条件执行顺序 最终都要转换成有顺序的执行序列

写:bin log, redo log(InnoDB用redo log来支持事务, 两阶段提交)

reference

mysql source code document

mysql SQL执行过程