2011-11-18 140 views
0

我正在构建一个rails项目,并且我有一个包含500k和1M行之间的一组表格的数据库,并且我不断创建新行。优化通过Rails数据库搜索

由于项目的性质,在每次创建之前,我必须在表格中搜索重复项(对于一个字段),因此我不会创建两次相同的行。不幸的是,随着我的桌子不断增长,这需要越来越长的时间。

我在想,我可以优化搜索通过添加索引到特定的字符串字段,通过我正在寻找..但我听说添加索引增加创建时间。

所以我的问题如下: 查找和创建包含索引字段的行的交易是什么?我知道向这些字段添加索引会使我的程序在Model.find_by_name时速度更快,但是它会使我的行创建速度降低多少?

回答

1

索引减慢项insertation,因为它需要将项添加到索引,并且需要一些ressources但一旦加入,他们加快你的SELECT查询,这就是像你说的也许B树心不是正确的为你选择!因为B-Tree索引索引主题的前X个单元。当你有整数时,这很好,但是文本搜索很棘手。当你查询,如

Model.where("name LIKE ?", "#{params[:name]}%") 

会加快的选择,但是当你使用的查询是这样的:

Model.where("name LIKE ?", "%#{params[:name]}%") 

它不会帮你,因为你要搜索整个字符串,它可以长一些百个字符,然后它不是一个有250个字符长字符串索引的前8个单元的改进!所以这就是一件事。但theres另一....

你应该添加一个唯一的索引,因为数据库更好地发现重复,然后红宝石是!它针对分类进行了优化,并确定了处理这个问题的更简洁更简单的方法!因为你也应该为相关模型添加一个验证,但这不是让数据库与之相关的原因。

//有关索引速度

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

你没有一个大组选项。当你只需要一个索引时,我不认为插入速度的损失会很大!但是选择速度会增加!

+0

感谢您的帮助,但如果我确实添加了一个唯一的索引,它会在多大程度上减缓插入?我担心它会让我的程序变慢,所以如果没有独特的索引,它会更好。 – BananaNeil

+0

查看帖子更新! – davidb

+0

谁对我的(已被接受的)文章投了反对票并对此一无所知? – davidb