文章来自:http://blog.csdn.net/wind520/article/details/42109061
对同一个sql语句,使用3种解析器解析出ast语法树(这是编译原理上的说法,在sql解析式可能就是解析器自定义的statement类型),执行100万次的时间对比。
- package demo.test;
- import java.io.StringReader;
- import java.sql.SQLSyntaxErrorException;
- import net.sf.jsqlparser.JSQLParserException;
- import net.sf.jsqlparser.parser.CCJSqlParser;
- import net.sf.jsqlparser.parser.CCJSqlParserManager;
- import net.sf.jsqlparser.statement.Statement;
- import org.opencloudb.parser.SQLParserDelegate;
- import com.alibaba.druid.sql.ast.SQLStatement;
- import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
- import com.foundationdb.sql.parser.QueryTreeNode;
- import com.foundationdb.sql.parser.SQLParser;
- import com.foundationdb.sql.parser.SQLParserFeature;
- public class TestParser {
- public static void main(String[] args) {
- String sql = "insert into employee(id,name,sharding_id) values(5, 'wdw',10010)";
- int count = 1000000;
- long start = System.currentTimeMillis();
- System.out.println(start);
- try {
- for(int i = 0; i < count; i++) {
- SQLParser parser = new SQLParser();
- parser.getFeatures().add(SQLParserFeature.DOUBLE_QUOTED_STRING);
- parser.getFeatures().add(SQLParserFeature.MYSQL_HINTS);
- parser.getFeatures().add(SQLParserFeature.MYSQL_INTERVAL);
- // fix 位操作符号解析问题 add by micmiu
- parser.getFeatures().add(SQLParserFeature.INFIX_BIT_OPERATORS);
- QueryTreeNode ast =parser.parseStatement(sql);
- // QueryTreeNode ast = SQLParserDelegate.parse(sql,"utf-8" );
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- long end = System.currentTimeMillis();
- System.out.println(count + "times parse,fdb cost:" + (end - start) + "ms");
- start = end;
- try {
- for(int i = 0; i < count; i++) {
- //Statements stmt = CCJSqlParserUtil.parseStatements(sql);
- Statement stmt =new CCJSqlParserManager().parse(new StringReader(sql));
- }
- } catch (JSQLParserException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- end = System.currentTimeMillis();
- System.out.println(count + "times parse,JSQLParser cost:" + (end - start) + "ms");
- start = end;
- for(int i = 0; i < count; i++) {
- MySqlStatementParser parser = new MySqlStatementParser(sql);
- SQLStatement statement = parser.parseStatement();
- }
- end = System.currentTimeMillis();
- System.out.println(count + "times parse ,druid cost:" + (end - start) + "ms");
- }
- }
输出结果:
1419327695186
1000000times parse,fdb cost:24468ms
1000000times parse,JSQLParser cost:11469ms
1000000times parse ,druid cost:1454ms
100万次:druid比fdbparser快16倍,比JSQLParser快近8倍
参考:Mycat路由新解析器选型分析与结果.docx
https://github.com/MyCATApache/Mycat-doc/blob/master/Mycat%E8%B7%AF%E7%94%B1%E6%96%B0%E8%A7%A3%E6%9E%90%E5%99%A8%E9%80%89%E5%9E%8B%E5%88%86%E6%9E%90%E4%B8%8E%E7%BB%93%E6%9E%9C.docx
相关推荐
并不需要SQL语句真正执行,是优化器估算的计算 来自数据库的统计信息,统计信息月准确,执行计划月精确 说明:网络经验:后者效率高于前者,但是以上两个查询语句的性能通过查询计划可以看出其实是一样的,后者...
曾经对一个长sql解析测试,能达到40倍左右。 2、 支持的语法更多。 下面列举一些fdbparser不支持,但是druidparser支持的语法: (1)Insert into ….on duplicate key update….. (2)Insert into (),()…语句 (3...
PL / SQL解析器 欢迎捐款,我对每一个帮助都很满意:) 概念 这将是一个多阶段解析器。这意味着,第一级仅解析一般结构。例如,它发现变量声明,但不检查定义的varchar2变量是否确实具有有效的字符串值。稍后将在字符...
目录 推荐序 前言 第1章 认识Oracle RAC 1.1 RAC产生的背景 1.2 RAC体系结构 1.2.1整体结构 1.2.2物理层次结构 ...15.4.3 SQL解析 15.4.4 SQL优化 15.4.5 SQL行源生成 15.4.6 SQL执行 15.5本章小结
9.7 如何影响优化器来提高性能 9.8 优化器总结 第10章 统计信息更新与碎片整理 10.1 统计信息更新 10.2 碎片整理 10.3 重新绑定程序包 10.4 本章小结 第11章 SQL语句调优 11.1 通过监控找出最消耗资源的SQL语句 ...
Needlstk:用于表达网络性能查询的系统 名称是针和堆栈的portmanteau,以反映在大海捞针中寻找针的目标。 发音为“ needle stack” 快速开始 需要Java 8:sudo apt-add-repository ppa:webupd8team / java sudo ...
§12.7 测试SQL语句性能 151 §12.7.1 SQL_Trace实用工具 151 §12.7.2 TKPROF实用程序 151 §12.8 使用SQL_Trace和TKPROF 151 §12.8.1 设置跟踪初始化参数 152 §12.8.2 启用SQL_Trace实用工具 152 §12.8.3 用...
目前国内对PostgreSQL的使用,主要反映在两个范畴1 用于取代MySQL和Oracle2 作为数据库产品原型,通过修改源码构筑自己的数据库,例如通过使用pg的sql解析器,省去自己编写sql解析器的困难。某些拿了政府大量补贴的...
从解析器到寻呼机,随时关注每个组件的开发。建筑该数据库由几个单独的组件组成。 这些处理SQL解析,中介表示生成,多节点共识, IR的执行以及(持久)存储。 要简要了解每个组件的用途,请查看。现有技术灵感来自...
java办公用品管理系统源码 MySQL 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。...资源列表,内容包括:分析工具、备份、...格式文件的解析器,用于 Ruby 语言。 - 一个具备多种
注意:该项目最初是作为的辅助软件而,但是由于切换到Irony来生成PL / SQL解析器,因此CSharpCC成为了一个未维护的项目。 CSharpCC 该项目的范围是移植JavaCC为.NET项目生成解析器和词法分析器(词法分析器)提供的...
1.2:sparkSQL的性能 5 1.2.1:内存列存储(In-Memory Columnar Storage) 6 1.2.2:字节码生成技术(bytecode generation,即CG) 6 1.2.3:scala代码优化 7 二:sparkSQL运行架构 8 2.1:Tree和Rule 9 2.1.1:Tree...
EF-ORM中采用了独特的SQL解析和改写技术,能够主动检查并确保SQL语句或者SQL片段在各个数据库上的兼容性。 EF中除了Criteria API以外,可以直接使用“SQL语句”或者“SQL片段”。但是这些SQL语句并不是直接传送给...
网站的性能测试 不同的视角 用户的视角 开发人员的视角 运维人员的视角 性能测试指标 响应时间 并发数 吞吐量 性能测试方法 性能测试 负载测试 压力测试 稳定性测试 web 前端...
代码生成器,ORMap,支持Oracle/SqlServer/MSAccess,性能大大优于iBatisNet,终身免费,随意使用。 =========== 软件说明: 1.1 引言 约有90%的企业信息化管理系统基于数据库实现,这类系统中又有超过...
内含代码生成器,支持Oracle/SqlServer/MSAccess,ORMap性能大大优于iBatisNet,终身免费无限制使用,绝无任何版权问题。 =========== 软件说明: 1.1 引言 约有90%的企业信息化管理系统基于数据库...
<br> <br>下面三张表格罗列的测试数据,可以明显看出AppFramework数据库访问组件的性能全面超越了IBatisNet: <br> <br>表I –10并发20循环(数据库和测试机分开) <br>对比项目 iBatis2.0...
13.1 使用和管理优化器统计信息 13.2 使用和管理自动工作负荷仓库 13.3 使用顾问程序体系结构 13.4 管理警报和阈值 13.5 小结 13.6 本章自测题 第14章 性能管理 14.1 使用自动内存管理 14.2 使用...
JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...
JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...