索引会减慢条目的插入速度,因为它需要将条目添加到索引中并且需要一些资源,但是一旦添加它们就会加快您的选择查询,就像您说的那样,但也许 b-tree 不是您的正确选择!因为 B-Tree 索引了索引主题的前 X 个单元。当您有整数但文本搜索很棘手时,那就太好了。当您执行以下查询时
Model.where("name LIKE ?", "#{params[:name]}%")
它会加快选择,但是当您使用这样的查询时:
Model.where("name LIKE ?", "%#{params[:name]}%")
它对您没有帮助,因为您必须搜索可能比几百个字符长的整个字符串,然后将 250 个字符长字符串的前 8 个单元编入索引并不是一种改进!所以这是一回事。但是还有一个......
您应该添加一个 UNIQUE INDEX,因为数据库在查找重复项方面比 ruby 更好!它针对排序进行了优化,并且它绝对是处理这个问题的更短更干净的方法!当然,您还应该向相关模型添加验证,但这不是让事情与数据库一起滑行的理由。
// 关于索引速度
http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html
你没有大量的选择。当您只需要一个索引时,我认为插入速度损失不会那么大!但是选择速度会增加比例!