Tag: 查询优化

轻量级内存数据库

我们的一个需求是创建一个临时内存数据库,然后执行各种插入/选择/更新。 一目了然,SQLite满足了我们所有的需求。 可以建立与内存中SQLite DB的连接,如下所示: class SQLiteBase < ActiveRecord::Base self.abstract_class = true establish_connection(adapter: 'sqlite3', database: ':memory:') end 不久之前,我们已经开始研究一些性能问题,结果发现我们需要在SQLite表中执行批量加载(特别是批量INSERT)数据(参见这些基准测试)。 不幸的是,看起来SQLite不支持批量INSERT。 那么还有其他基于SQL的轻量级内存数据库,它们支持批量INSERT吗? 如果没有这样的 – 有没有办法利用重量级数据库,如PostreSQL(MySQL或任何其他主要播放器)作为内存数据库 ? 如果postresql / mysql不是一种可行的方式 – 是否有任何其他C-heavy优化的数据结构,并在其上面使用查询语言? (有/没有ruby绑定)。

一次通话中多个日期范围的总和?

我有以下查询: SELECT SUM(“balance_transactions”.”fee”) AS sum_id FROM “balance_transactions” JOIN charges ON balance_transactions.source = charges.balance_id WHERE “balance_transactions”.”account_id” = 6 AND (balance_transactions.type = ‘charge’ AND charges.refunded = false AND charges.invoice IS NOT NULL) AND (“balance_transactions”.”created” BETWEEN ‘2013-12-20’ AND ‘2014-01-19’); 这样做会增加这两个日期之间发生的所有“费用”。 大。 工作良好。 问题是我几乎总是需要一次数百个日期范围的费用,这相当于我运行相同的查询数百次。 效率不高。 但有没有办法将其压缩为所有日期范围的单个查询? 例如,我将调用SUM作为一系列范围,如下所示: 2013-12-20 to 2014-01-19 2013-12-21 to 2014-01-20 2013-12-22 to 2014-01-21 2013-12-23 to 2014-01-22 […]

Rails 3数据库索引和其他优化

我一直在构建rails应用程序,但不幸的是,我的应用程序都没有大量的数据或流量。 但现在我有一个正在获得动力。 因此,我首先考虑扩展和优化我的应用程序。 似乎第一个也是最简单的步骤是使用数据库索引。 我有一个很好的索引列表,应该涵盖几乎所有的查询,但当我通过迁移将它们添加到我的数据库时,它只需要几秒钟来添加它们。 出于某种原因,我认为他们必须经历我的所有条目(其中有数千条)并将它们编入索引。 这是否意味着我的索引尚未应用于我现有的数据? 它们只会被添加到新条目中吗? 此外,我正在研究其他扩展解决方案,例如memcached,以及减少我的查询等等。 如果有人能指出一些优秀的资源来优化我的rails 3 app我会非常感激! 谢谢! 编辑: 感谢关于数据库索引的所有好答案! 在优化和扩展我的应用程序方面,我还应该注意什么? Memcached的? 在优化方面,最佳性能提升/努力比是多少?

在Rails中防止N + 1个查询

我已经看到了一些在Rails中调用ActiveRecord的find方法时传递一个:include哈希值的例子。 但是,我还没有看到任何关于这是否可以通过关系方法的例子。 例如,假设我有以下内容: def User :user_favorites end def Favorite :user_favorites end def UserFavorite < ActiveRecord::Base belongs_to :user belongs_to :favorite end 我看到的所有示例都显示如下代码: User.find(:all, :include => :favorite) 但我没有看到任何关于使用关系的例子。 相反,我可以做这样的事情吗? User.favorites(:include => :user)