【问题标题】:Close Reader with Rows Remaining关闭剩余行的阅读器
【发布时间】:2015-05-12 22:25:25
【问题描述】:

我有只需要前 10,000 行的情况。

奇怪的是选择前 10,000 名而不是仅仅在 10,000 名停止SqlDataReader 并不总是与哪个最快相同。

差异永远不会超过 10%,但有没有最好的方法?

我怀疑 Reader 一次获得块,如果 10,000 发生在块的早期会更长。

但我所看到的对我来说很奇怪。
在通过没有顶部的选择读取 10,000 之后,似乎需要更长的时间关闭阅读器,因为它仍然必须清除行。

我的数字变化不足以得出结论。

是否有读取前 10,000 行的最佳方法?

我正在阅读使用 (nolock) 和两个 Int32 排序的内容,以防万一。

【问题讨论】:

    标签: .net sql-server tsql sqldatareader


    【解决方案1】:

    当您请求 TOP 10000 时,优化器会注意到这一点并尽可能高效地生成该数量(考虑到其在推理和信息方面的局限性)。

    因此,在这两种情况下,您可能会得到不同的计划。通常,TOP 10000 会更有效,但不指定它可能会巧合地为您提供更好的执行计划。导致更好计划的随机变化并非闻所未闻。

    请注意,提前关闭阅读器会带来一些问题。我现在找不到链接,我不记得它是什么。我认为在某些情况下关闭阅读器只是获取查询的其余部分并丢弃它而不是取消查询。

    【讨论】:

    • 我支持你,但在某些情况下,关闭阅读器会更快。我检查了查询计划,顶部没有更改查询计划(至少在 SSMS 中)。
    • 查询通常需要多长时间(以秒为单位)?影响很大吗?
    • 哦,我只是在说 0.11 与 0.10。我更担心规模而不是速度。我更多的是寻找减少服务器负载的原因。我知道这可能是洗头。我只是想选择一种方式,有一个理由。
    猜你喜欢
    • 2020-11-11
    • 2022-10-07
    • 2012-10-31
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    相关资源
    最近更新 更多