mysql_fetch_row(result); 会不会导致超时现象?这个函数的负担不会很大吧!
解决方案 »
- mysql group by的问题
- sql语句应该如何写?
- mysql 插入十万以上数据速度变慢
- mysql中的blob类型,怎么显示成可读的东西?(不知道存的是什么,应该是比较少的数据文件),谢谢指点!
- 如何以UTF8的形式插入一条记录到MySQL数据库
- 无法进入数据库
- 装了个MYSQL是否影响开机的速度.
- 如何把.dbf格式地数据导入My sql数据库中?在线等待.........
- 一个mysql中有关auto_increment的问题。
- MySQL 存储过程报 #1193 - Unknown system variable 'isDone' 错误
- insert一行记录,如果得到这行记录的ID号?
- 求一条sql语句,关联3个表格查询
这里我就有个问题了,远程连接数据库的时候,结果集如果得到了,是已经从服务端发送到了客户端了?还是每次fetch的时候才传送啊
int STDCALL mysql_query(MYSQL *mysql, const char *q);
int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
unsigned long length);
int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
unsigned long length);
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
提供的mysql_query+mysql_store_result应该是将结果保存到客户端,每次fetch的时候不传送,而使用mysql_real_query时每次fetch的时候传送
(未得到正式资料,仅个人看法)
客户端处理结果集的方式有两种。一种方式是,通过调用mysql_store_result(),一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。第二种方式是针对客户端的,通过调用mysql_use_result(),对“按行”结果集检索进行初始化处理。该函数能初始化检索结果,但不能从服务器获得任何实际行。(来源于Mysql5.1中文手册)至于超时情况就取决于楼主的实际应用了,不妨把代码贴上来。
客户端处理结果集的方式有两种。一种方式是,通过调用mysql_store_result(),一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。第二种方式是针对客户端的,通过调用mysql_use_result(),对“按行”结果集检索进行初始化处理。该函数能初始化检索结果,但不能从服务器获得任何实际行。(来源于Mysql5.1中文手册)至于超时情况就取决于楼主的实际应用了,不妨把代码贴上来。
=========
应该不会,内存分配在mysql_store_result()时进行,mysql_fetch_row只是将结果中的字段的指针返回(char** 暂称为字段指针),相对数据少的多(与字段数相同),也可能数据库返整个的结果分配大内存时还够,不料在分配小的与字段数相同的字段指针的内存时却在小河里翻了船,最可能mysql的实现者在mysql_store_result()时就将字段指针(mysql_fetch_row返回值空间)一并分配了,省得每次mysql_fetch_row都重新分配一样大小的内存,这样就肯定不会出现内存分配异常了。