分类: Mysql/postgreSQL
2011-07-09 14:41:29
最近为了挖掘mysql的性能,使用了HandlerSocket来访问数据,表现确实还不错,特别是使用merge表的时候。
但是HandlerSocket(一下简称hs)本身的文档比较少,出错信息不是很友好,出错的时候比较难定位问题,往往要翻阅其源代码,这里分享两个我最近遇到的问题:
表结构如下:
mysql> show create table tab_xxx\G
*************************** 1. row ***************************
Table: tab_xxx
Create Table: CREATE TABLE `tab_xxx` (
`Type` char(2) DEFAULT NULL,
`flag` char(1) DEFAULT NULL,
`count` char(2) DEFAULT NULL,
`file_id` char(10) DEFAULT NULL,
`exc_id` char(4) DEFAULT NULL,
`FileType` char(2) DEFAULT NULL,
`subno` char(24) DEFAULT NULL,
KEY `idx_subno` (`subno`)
) ENGINE=InnoDB使用hs访问的时候我使用了如下语句:
client->request_buf_open_index(id, "db_name", "table_name", "subno", "EventFormatType, roll_flag, roll_count, file_id, exc_id, FileType,subno", 0);
该语句在运行是报以下错误:2 idxnum,看得一头雾水,没办法只好翻阅一下源代码,搜索 idxnum,找到了问题,KEY的名称必须使用idx_subno,这个问题解决了,重新编译运行,另一个问题又来了,报以下错误:2 fld,有了前面的经验,继续搜索源代码,原来hs列之间只能使用","分隔,不能有其他空格等字符,这个是在代码里面写死了的,于是修改如下:
client->request_buf_open_index(id, "db_name", "table_name", "idx_subno", "EventFormatType,roll_flag,roll_count,file_id,exc_id,FileType,subno", 0);
这次终于运行成功了。总结:
1、key要使用key名称,不能使用列名称;
2、列之间只能用","分隔,不能有其他空格等字符;