Tag: 索引

我应该联合索引ActiveRecord多态关联吗?

我有一个我希望非常大的度量表。 它具有多态关联,因此它可以属于想要记录某些度量的其他模型。 我通常索引像这样的关联列来加速关联加载。 我听说有人在谈论联合索引这种关联 。 这看起来像: add_index :comments, [:commentable_type, :commentable_id] 但我也听到过反对创建低基数指数的建议 ,因为指数的收益并没有抵消维持指数的开销。 由于我的多态关联的_type一半可能在数百万行中只有4-5个值,所以我倾向于只对多态关联的_id部分进行索引。 我可能会使用_id列和一些其他未提及的整数和日期时间列创建一些额外的联合索引,但我也不会在这些索引中包含_type。 这是你会做/推荐的吗?

Rails:如何将add_index添加到现有表

我已经迁移了一个名为units的表,其中有几列。 我想知道如何使用cmd将独立的“add_index”迁移到此表中。 这段代码是否正确: class AddIndexToUnits < ActiveRecord::Migration def self.up add_index :units, :lesson_id end def self.down remove :units end end 我有一种感觉自我。可能是错的,我不确定。

Rails迁移:重命名表上的索引

我创建了一个表并添加了一个索引。 在第二次迁移时,我重命名了该表。 该指数会继续运作吗?

多列数据库索引和查询速度

我正在部署一个Rails应用程序,该应用程序将来自各种第三方提供商的优惠券数据聚合到一个可搜索的数据库中。 针对每个优惠券在四个字段中进行搜索:标题,优惠券代码,描述和到期日期。 因为这些第三方提供商中的一些在保持数据排序方面做得相当糟糕,并且因为我不希望重复的优惠券进入我的数据库,所以我在这四列中实现了一个独特的复合索引。 这可以防止同一张优惠券不止一次插入我的数据库。 鉴于我正在搜索这些列(通过简单的WHERE column LIKE %whatever%暂时的WHERE column LIKE %whatever%匹配),我希望这些列能够通过索引它们来获得速度增益。 所以这是我的问题: 所有列的复合索引是否会提供相同的搜索速度增益,就好像我已经为每列应用了单独的索引一样? 或者它只保证行之间的唯一性? 使问题复杂化的是我正在开发Rails,所以我的问题既适用于SQLite3和MySQL(以及我们将来可能移植到的任何内容),而不是一个特定的RDBMS。 我的猜测是索引会加速搜索各个列,但我真的没有足够的“幕后”数据库专业知识来对这个判断充满信心。 感谢您提供专业知识。

添加索引到电子邮件列的罪魁祸首unit testing失败

我是设计和导轨的新手,我只是将设计与我的示例应用程序集成在一起。 我注意到在创建用户模型后,我的所有unit testing都失败了。 我试着缩小它,发现即使为user_test.rb生成的断言“真相”也失败了: ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: \ column email is not unique: INSERT INTO “users” (… 一旦我注释掉add_index … # add_index :users, :email, :unique => true …并重新运行rake db:test:load使用ruby -I test test/unit/user_test.rb rake db:test:load并重新运行测试。 有没有人经历过这个?

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

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

Rails – 多索引密钥关联

似乎有许多方法可以处理多个外键关联。 我接触过它的每一种方式都有它们的缺点,而且我是Rails的新手,我确信其他人遇到了类似的情况,我可能正在研究很久以前解决的问题。 我的问题是: 什么是处理多索引键关联的有效方法,同时仍保留所有其他Rails sql修饰符(例如:include等)? 我的情景是: 我有一个表关联如下(简化),用于通过链接将人们连接到其他人: People +—-+———–+ | id | name | +—-+———–+ | 1 | Joe | +—-+———–+ | 2 | Sally | +—-+———–+ | 3 | Bob | +—-+———–+ Links +—-+———–+———+ | id | origin_id | rcvd_id | +—-+———–+———+ | 1 | 2 | 1 | +—-+———–+———+ | 2 | 1 […]

为什么我的PostgreSQL数组索引没有被使用(Rails 4)?

我有一个PostgreSQL字符串数组作为表中的列。 我使用GIN方法创建了一个索引。 但是任何查询都不会使用索引(相反,他们使用filter对整个表进行顺序扫描)。 我错过了什么? 这是我的迁移: class CreateDocuments < ActiveRecord::Migration def up create_table :documents do |t| t.string :title t.string :tags, array: true, default: [] t.timestamps end add_index :documents, :tags, using: 'gin' (1..100000).each do |i| tags = [] tags << 'even' if (i % 2) == 0 tags << 'odd' if (i % 2) == 1 tags […]

Ruby on Rails中多列的索引

我正在实现跟踪用户阅读的文章的function。 create_table “article”, :force => true do |t| t.string “title” t.text “content” end 到目前为止,这是我的迁移: create_table :user_views do |t| t.integer :user_id t.integer :article_id end 始终会查询user_views表以查找两列,而不仅仅查找一列。 我的问题是我的索引应该是什么样子。 这些表的顺序是否存在差异,是否应该有更多选项或其他。 我的目标数据库是Postgres。 add_index(:user_views, [:article_id, :user_id]) 谢谢。 更新: 因为在两列中只能存在一行包含相同值的行(因为在知道user_id是否已读取article_id时),我应该考虑:unique选项吗? 如果我没弄错的话,这意味着我不必自己进行任何检查,只需在每次用户访问文章时插入即可。

Ruby中已排序元素的原始索引

arr = [1,3,2,4] arr.sort #=> [1,2,3,4] 我想要一个数组[0, 2, 1, 3] arr.sort [0, 2, 1, 3] ( arr.sort顺序的原始索引) 使用Ruby 1.9.3有一种简单的方法吗? 谢谢