【问题标题】:Does MySQL use server-side pre-fetching when streaming a ResultSetMySQL 在流式传输 ResultSet 时是否使用服务器端预取
【发布时间】:2016-06-27 19:03:52
【问题描述】:

MySQL JDBC 连接器定义了两种获取模式:

根据文档,流式传输将单独获取每一行,一次一个。

  1. 当使用流式传输时,每一行都在单独的数据库往返中获取,这是真的吗?

  2. MySQL 服务器是提前预取结果集还是一次遍历服务器端游标一行?

【问题讨论】:

标签: java mysql jdbc cursor resultset


【解决方案1】:

我相信简短的回答是肯定的。我不知道适用于mysql_use_result/mysql_store_result 的细微差别,但有几种类型的预取:

  • 下面的 InnoDB 存储引擎有预读功能,所以会提前开始抓取页面。

  • 某些查询确实需要完全具体化,然后才能一次以流式传输行(想想不使用索引的排序,或不使用松散索引扫描的分组)。如果发生这种情况,临时表将使用show profiles 功能显示。

  • 最后,在 MySQL 5.6+ 中,可以对存储引擎的检索进行批处理 (BKA)。这可能是您暗示的情况,填充的缓冲区称为join_buffer_size

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多