前几天在mysql文档中发现了它有个handler
http://dev.mysql.com/doc/refman/5.1/en/handler.html,
号称比select要快,因为省略了sql解析,查询优化等环节,也不用提供一致性读.
所以用mysqlslap测试一下
CREATE TABLE `20130122handler` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`content` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `20130122handler_idx_uid` (`uid`)
) ENGINE=InnoDB
表里600w条随机数据
[mysqlslap]
query="D:/mysql-5.1.63-node1/mysqlslap-query_handler.sql"
create-schema="crap"
delimiter=";"
concurrency=1
iterations=200
mysqlslap-query_handler.sql内容为
HANDLER 20130122handler open as h;
HANDLER h read 20130122handler_idx_uid=(26010200);
HANDLER h read 20130122handler_idx_uid=(23742985);
......
一共有100个HANDLER h read
测试三次,结果如下
Benchmark
Average number of seconds to run all queries: 0.035 seconds
Minimum number of seconds to run all queries: 0.000 seconds
Maximum number of seconds to run all queries: 1.032 seconds
Number of clients running queries: 1
Average number of queries per client: 101
Benchmark
Average number of seconds to run all queries: 0.030 seconds
Minimum number of seconds to run all queries: 0.000 seconds
Maximum number of seconds to run all queries: 1.016 seconds
Number of clients running queries: 1
Average number of queries per client: 101
Benchmark
Average number of seconds to run all queries: 0.025 seconds
Minimum number of seconds to run all queries: 0.000 seconds
Maximum number of seconds to run all queries: 1.032 seconds
Number of clients running queries: 1
Average number of queries per client: 101
换成了
select * from 20130122handler where uid=26010200;
select * from 20130122handler where uid=23742985;
......
结果为
Benchmark
Average number of seconds to run all queries: 0.055 seconds
Minimum number of seconds to run all queries: 0.015 seconds
Maximum number of seconds to run all queries: 1.031 seconds
Number of clients running queries: 1
Average number of queries per client: 100
Benchmark
Average number of seconds to run all queries: 0.050 seconds
Minimum number of seconds to run all queries: 0.015 seconds
Maximum number of seconds to run all queries: 1.032 seconds
Number of clients running queries: 1
Average number of queries per client: 100
Benchmark
Average number of seconds to run all queries: 0.044 seconds
Minimum number of seconds to run all queries: 0.015 seconds
Maximum number of seconds to run all queries: 1.032 seconds
Number of clients running queries: 1
Average number of queries per client: 100
看来还是有一定的性能的提升.
分享到:
相关推荐
- **HANDLER接口**:MySQL的HANDLER接口提供了低级别的表访问,这里也需要处理元数据锁。 - **LOCK TABLES下的操作**:当表被显式地锁定时,元数据锁的行为会有所不同。 - **非法的锁升级情况**:自动修复和自动发现...
2. `READ` 命令用于读取数据,根据索引和条件来定位记录。它可以按照索引名和比较操作符(如 `=`, `, `>` 等)来查找记录,或者使用 `FIRST`, `NEXT`, `PREV`, `LAST` 关键字来遍历索引。 3. `CLOSE` 命令用于关闭...
首先,我们要明白的是,Android系统本身并不支持直接连接到远程MySQL服务器,因为它不包含MySQL的客户端库。通常,我们会通过Web服务(如RESTful API)来间接实现数据的获取。以下是一个简单的步骤概述: 1. **构建...
最后,MySQL提供了一个“SHOW PROCESSLIST”命令,让DBA可以直接查看当前所有活动进程的状态信息,包括id、user、host、db、command、time、state、info等列。其中,id为连接标识,user显示当前用户,host指示命令...
2. **创建session表**:在MySQL数据库中创建一个专门用于存储session数据的表,通常包括字段如`session_id`(存储session ID)、`timestamp`(记录session最后更新的时间)和`data`(序列化后的session数据)。...
- **定义**:虽然MySQL没有直接支持API游标这一概念,但在实际应用中,可以通过OLEDB、ODBC等接口来实现类似的功能。 - **应用场景**:适用于客户端应用程序与数据库之间的交互。 - **特点**:支持客户端应用程序...
总结来说,MyBatis通过自定义TypeHandler实现了对MySQL JSON字段的映射,利用Jackson库进行JSON数据的序列化和反序列化,确保Java对象和数据库中的JSON数据能顺利地进行转换和交互。在处理复杂的数据结构时,这样的...
在 MySQL 5.7 中,连接执行过程是通过 `do_command()` 函数来实现的,该函数位于 `sql/conn_handler/connection_handler_one_thread.cc` 文件中。`do_command()` 函数会从连接中读取一个命令,并执行它。如果命令是...
执行器根据这个计划调用相应的存储引擎功能,如读取数据、更新记录或创建索引。数据流涉及网络通信、内存管理及磁盘I/O等多个层面。 6. **Plugin介绍** MySQL的插件系统允许扩展其功能,如新的存储引擎、认证方法或...
- **handler**:继承自MySQL的handler,实现handler API与Server交互。这是存储引擎与服务器层之间的接口。 - **ibuf**:插入缓冲(Insert Buffer)的实现。用于批量插入操作,提高写性能。 - **lock**:InnoDB的锁...
MySQL中的游标主要在存储过程或函数中使用,用于逐行读取查询结果集中的数据并执行相应的操作。 #### 二、游标的优点 - **逐行处理**:能够逐行读取和处理结果集中的数据,非常适合于需要针对每一行记录执行特定...
MySQLHandler.insertIntoDatabase(excelData); } ``` 以上代码只是一个基础示例,实际应用中需要考虑更多细节,如异常处理、数据类型转换、批量操作性能优化等。同时,为了提高效率和减少内存消耗,建议使用流式...
- **读取数据**: - Oracle:使用`FETCH`语句(例如:`FETCH cursor_name INTO var_1, var_2, ..., var_n;`) - MySQL:同样使用`FETCH`语句(例如:`FETCH cursor_name INTO var_1, var_2, ..., var_n;`) - **...
10. **Handler_read_rnd_next**:用于顺序扫描的行读取次数,如果很高,可能意味着没有适当的索引,需要进行索引优化。 11. **Bytes_sent** 和 **Bytes_received**:分别记录发送和接收的数据量,可用来评估网络I/O...
接着打开游标并进入一个循环,使用 `FETCH` 语句逐行读取数据,直到所有数据都被处理完毕。最后关闭游标。 #### 考虑的因素 虽然游标提供了许多优势,但在使用时仍需考虑以下几个因素: - **性能**:处理大量数据...
这里设置了控制流程,首先将`b`的值设为`1`,然后打开游标`a`,通过`REPEAT`循环不断读取数据到变量`c`中,直到没有更多的数据可读取为止。最后关闭游标并设置输出参数`re_value`的值为`c`。 #### 四、调用存储过程...
-- 循环读取数据 FETCH Integral_cursor INTO PostID, DifferDay; WHILE done = 0 DO IF DifferDay > 7 THEN UPDATE postrelease SET PostType = 2 WHERE ID = PostID; END IF; FETCH Integral_cursor INTO ...
该模式创建一个ValueListHandler对象来控制查询的执行以及结果集的缓存,它通过DAO(Data Access Object)来执行查询,并将数据库返回的结果集(传输对象Transfer Object的集合)缓存起来,接下来的客户端查询请求将...
2005年10月,Oracle 收购了 InnoDB OY,尽管当时 Oracle 并未直接拥有 MySQL,但这一举动为后来 Oracle 收购 MySQL 奠定了基础。 **5. Sun Microsystems 收购 MySQL AB(2008年)** 2008年1月,Sun Microsystems ...
通过以上的介绍和案例分析,我们可以看到游标在MySQL中的强大功能,特别是在处理需要逐行访问数据的情况下。然而,需要注意的是,游标的使用会消耗更多的系统资源,并且可能会影响性能。因此,在设计应用程序时,...