MySQL C API 执行 select 语句后有1百万条记录,
而我只需要100条记录,但是调用 mysql_free_result()仍然会等到所有记录从服务器端返回
测试过很多MySQL客户端,全部都是等到所有记录都返回到客户端
不知道有什么方法,能在我读完100条记录后,中止当前记录的传输
(limit 能限制select返回的行数,但这不是我想要的结果,
MySQL的配置变量,也做不到控制返回的行数或内存)在SQL Server中, 即使select 有1百万记录
oledb 在处理记录集的时候可以随时中止
有对MySQL C API 熟悉的,能帮忙给个提示吗

解决方案 »

  1.   

    基本上可以明确的告诉你,如果不用limit,你这个没有办法解决。
    100万记录,你要么使用mysql_store_result, (将全部结果取到客户端)
    要么使用mysql_use_result(结果在server端存储)
    但都要求把结果全部取完。一次取100万条记录,确实 不是一个很好的用法。该用limit就用limit.
      

  2.   

    如果这样,你可以使用mysql_use_result()
      

  3.   

    MYSQL_RES *mysql_use_result(MYSQL *mysql) 
    另一方面,如果你正在客户端一侧为各行进行大量的处理操作,或者将输出发送到了用户可能会键入“^S”(停止滚动)的屏幕,就不应使用mysql_use_result()。这会绑定服务器,并阻止其他线程更新任何表(数据从这类表获得)。使用mysql_use_result()时,必须执行mysql_fetch_row(),直至返回NULL值,否则,未获取的行将作为下一个检索的一部分返回。C API给出命令不同步错误,如果忘记了执行该操作,将不能运行该命令。
      

  4.   


    目前MYSQL的版本不能支持你的要功能要求,不过可以用limit的sql后缀变相实现。
    业务处理逻辑都是可以变通的。或者你优化下你的sql,让它不要select100万记录出来?
      

  5.   

    谢谢大家的回复目前采用的方法是,额外开了一个连接,专门用来kill其它阻塞的Query现在还不能确定这样操作,有没有副作用
      

  6.   

    没有太理解,为什么不能用limit的原因。
      

  7.   

    我记得有个 LIMIT 关键字