栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

计算执行的查询数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算执行的查询数

我认为您通过提及回答了您自己的问题

assert_queries
,但是这里有:

我建议您看一下后面的代码,

assert_queries
并使用它来构建自己的方法,该方法可用于计算查询。这里涉及的主要魔术是这一行:

ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)

今天早晨,我有点麻烦了,并且删除了ActiveRecord进行查询计数的部分,并提出了以下建议:

module ActiveRecord  class QueryCounter    cattr_accessor :query_count do      0    end    IGNORED_SQL = [/^PRAGMA (?!(table_info))/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/, /^SHOW max_identifier_length/]    def call(name, start, finish, message_id, values)      # FIXME: this seems bad. we should probably have a better way to indicate      # the query was cached      unless 'CACHE' == values[:name]        self.class.query_count += 1 unless IGNORED_SQL.any? { |r| values[:sql] =~ r }      end    end  endendActiveSupport::Notifications.subscribe('sql.active_record', ActiveRecord::QueryCounter.new)module ActiveRecord  class base    def self.count_queries(&block)      ActiveRecord::QueryCounter.query_count = 0      yield      ActiveRecord::QueryCounter.query_count    end  endend

您将可以在

ActiveRecord::base.count_queries
任何地方引用该方法。向其传递一个运行查询的块,它将返回已执行的查询数:

ActiveRecord::base.count_queries do  Ticket.firstend

为我返回“
1”。要使此工作正常进行,请执行以下操作:将其放在以下位置的文件中,

lib/active_record/query_counter.rb
并在文件中要求它
config/application.rb

require 'active_record/query_counter'

嘿!


可能需要一些解释。当我们调用此行时:

    ActiveSupport::Notifications.subscribe('sql.active_record', ActiveRecord::QueryCounter.new)

我们了解了Rails
3的小通知框架。这是对Rails的最新主要版本的一个鲜亮的补充,没人真正知道。它允许我们使用

subscribe
方法在Rails中订阅事件通知。我们传入要订阅的事件作为第一个参数,然后将任何响应的对象
call
作为第二个参数。

在这种情况下,当执行查询时,我们的小查询计数器将按照应尽的方式递增ActiveRecord ::
QueryCounter.query_count变量,但仅适用于 实际 查询。

无论如何,这很有趣。希望对您有用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号