你如何识别Rails中最好的数据库索引?

时间:2011-05-03 20:28:24

标签: ruby-on-rails ruby-on-rails-3 database-design indexing

在Rails中,我一直在尝试构建数据库索引来加速我的查询,但我经常发现在运行迁移后我的数据库构建新的数据库,它仍然没有使用我正在构建的索引(甚至虽然对我来说,对于特定的查询来说,它们似乎是完美的。)

Rails中是否有工具可以搜索系统并识别需要创建的特定索引以获得最佳性能?

如果没有,是否有任何特定的规则来确定我的数据库没有使用我精心设计的索引的原因?

基本上,我的问题是:如何避免我当前的流程,即1)运行迁移创建一堆可能的索引,2)发现它们不起作用,3)回滚并感觉稍微沮丧在我的数据库明显的近视?

3 个答案:

答案 0 :(得分:2)

好吧,如果您的所有查询都是 SELECT * FROM 的形式,则索引可能不会被使用。首先调整查询,这样您只返回每个视图所需的数据,然后从那里构建索引。

此外,您可以在数据库中为每个查询运行EXPLAIN,这将比Ruby社区提供的任何gem /插件更具启发性。

答案 1 :(得分:0)

你正在使用什么数据库?你应该做一些查询日志分析,这样你就可以看到正在运行的查询,频率,花费的时间等等......对于postgres来说,一个很好的工具是pgfouine。 mysql有slow query log所以你可以找到最严重的罪犯。掌握了这些数据后,您可以对最慢的查询运行解释,查看哪些索引有意义添加等等。

您能提供一些慢查询和当前架构和索引的示例吗?

答案 2 :(得分:0)

签出https://github.com/eladmeidar/rails_indexes,扫描缺失的索引。

与查询效率相关,但不一定是索引https://github.com/flyerhzm/bullet,它会通知您N + 1查询和急切加载机会等事项。